Component, Factory parametry

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Isigarek
Člen | 74
+
0
-

Zdravíčko mám tu menší problém. Právě jsem se chtěl začít učit vytvářet továrničky pro zjednodušení práce. A tak jsem narazil na návod s použitím interface Factory řešení jenže chtěl bych tam předávat i parametry ID. Díky za rady…

Component

<?php
namespace App\FrontedModul\Model;

use Nette;
use Nette\Application\UI\Control;

class NotificationControl extends Control
{
	/**@var for render function*/
	private $unreadCount = 0;
	/**@persistent */
	private $notifications = array();

	/**@var Nette\Database\Context @inject*/
	protected $db;

	public function __construct()
	{

	}

	/**
	* Add notification to system
	*@param array params
	*@return void
	*/
	public function add($params)
	{
		$this->notifications[] = array(
				"title" => $params["title"],
				"icon" => $params["icon"],
				"time" => $params["time"],
				"type" => $params["type"],
				"status" => $params["status"],
			);
		return true;
	}

	/**
	* Get all notifications from db
	*@param int userID
	*@return array dataArray
	*/
	public function get($ID)
	{
		$data = $this->db->table("notification")->where("userID",$ID);
		$return = array();

		foreach($data as $noti)
		{
			if($noti["status"] == "unread") $this->unreadCount ++;
			$this->add($noti);
		}
	}

	/**
	* Render function for control
	*/
	public function render()
	{
		$template = $this->template;
		$template->setFile(__DIR__."/NotificationControl/notification.latte");
		$template->unreadCount = $this->unreadCount;
		$template->notifications = $this->notifications;
		$template->render();
	}
}

Factory

<?php
interface INotificationControlFactory
{
	/** @return App\FrontedModul\Model\NotificationControl */
	function create();
}

Použití v BASE PRESENTERU

protected function createComponentNotifications()
	{
		return $this->noti->create("data");
	}
Isigarek
Člen | 74
+
0
-

V base Presenteru tedy jsem zapomněl na injectování…

/**@var App\FrontedModul\Model\INotificationControlFactory*/
	private $noti;

public function injectINotificationControlFactory(\INotificationControlFactory $factory)
	{
		$this->noti = $factory;
	}
David Matějka
Moderator | 6445
+
+4
-

uvedes je v interface

interface INotificationControlFactory
{
    /** @return App\FrontedModul\Model\NotificationControl */
    function create($id);
}

a stejne pojmenovany parametr v konstruktoru NotificationControl

class NotificationControl extends Control
{

	private $id;

    public function __construct($id)
    {
		$this->id = $id;
    }

tohle tedy plati pro 2.3, ve starsi verzi se to musi sloziteji zapsat v neonu

Isigarek
Člen | 74
+
0
-

Díky moc! :)