LINUX & DEV PORADNA

  1. Vyřešeno (1 odpovědí)
    4
    1

    PHP Nette - jak používat model prakticky

    napsal Switchblade do kategorie "programovani"
    Ahoj, skoro všude čtu informaci, že pro složitější operace v PHP Nette není vhodné tyto operace provádět v presenteru, ale používat k tomu model, nevím však jak. Poradíte mně někdo jak používat v Nette model?
    Bez přílohy
    • Zkontrolováno
      2
      1

      RE: PHP Nette - jak používat model prakticky

      odpověděl Superuser: Hanz
      Ahoj,

      jak používat model v Nette si můžeme ukázat na této ukázce, kdy vytvoříme model v souboru app/model/PomocneFunkce.php, který bude sloužit k tomu, aby nám zobrazoval uživatelské jméno právě přihlášeného uživatele pomocí metody showUser($uid):
      
      namespace App\Model;
      
      use Nette;
      use Nette\Security\User;
      
      class PomocneFunkce
      {
      	use Nette\SmartObject;
      
      	private $database;
      	private $user;
      
      	public function __construct(Nette\Database\Context $database)
      	{
      	        $this->database = $database;
      	}
      
      	public function showUser($uid)
      	{
      	        if (isset($uid)) {
      
      			$username = this->database->table('users')
                                                     ->select('username')
                                                     ->where('id ?', $uid)
                                                     ->order('datum DESC')
                                                     ->fetch();
      
      			$username = $username->username;
      
      		} else {
      
      			$username = "Host";
      
      	        }
      
      		return $username;
      
      	}
      }
      


      Že existuje nějaký model PomocneFunkce.php musíme Nette řici v souboru app/config/config.neon
      
      services:
      	- App\Model\PomocneFunkce
      


      Model PomocneFunkce.php chceme používat v tomto případě v BasePresenteru, proto musíme model použít (use) a injektnout (@inject):
      
      namespace App\Presenters;
      
      use Nette;
      use Nette\Security\User;
      use App\Model\PomocneFunkce;
      
      abstract class BasePresenter extends Nette\Application\UI\Presenter
      {
      
          /**
          * @inject
          * @var PomocneFunkce */
          public $modelPomocneFunkce;
      
          public function beforeRender()
          {
              parent::beforeRender(); 
      
              $uid = $this->user->id;
              $this->template->userInfo = $this->modelPomocneFunkce->showUser($uid);
      
          }
      
      }
      
      Bez přílohy
Tento web používá k poskytování služeb, personalizaci reklam a analýze návštěvnosti soubory cookie. Používáním tohoto webu s tím souhlasíte. Další informace