PHP Nette - jak používat model prakticky

Před 1 lety napsal Switchblade

Vyřešeno
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?

RE: PHP Nette - jak používat…

Před 1 lety napsal Hanz

Zkontrolováno

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);

    }

}
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