[VYŘEŠENO] Potíže s novými Closure na 2.0.4

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

tl;dr version

Pokud má služba property se stejným názvem jako jeho metoda, tak díky ObjectMixin vytváří démonické chyby při vypisování přes šablonu.

long version

Zdravím, chybu jsem aplikoval na čistém sandboxu staženém na těchto stránkách (verze stable 2.0.4).
pakliže mám service BugService:

class BugService extends \Nette\Object
{
    private $pay;//platba

    public function pay($foo)//zaplatit s pripoctenim DPH
    {
        $this->setPay($foo * 1.2);
        return $this->getPay();
    }

    public function setPay($pay)
    {
        $this->pay = $pay;
    }

    public function getPay()
    {
        return $this->pay;
    }
}

zaregistrovanou jako service:

services:
		authenticator: Authenticator
		bugService: BugService

použitou v presenteru:

class HomepagePresenter extends BasePresenter
{

	public function renderDefault()
	{
		$this->template->bugService = $this->context->bugService;
	}

}

a v šabloně

{block content}
    {dump $bugService->pay}
    {$bugService->pay}

vyhodí tuhle laděnku

Editoval pilec (28. 8. 2012 15:58)

Filip Procházka
Moderator | 4668
+
0
-

Určitě je všem jasné, co za to může. Doporučil bych přehodit pořadí, aby getter měl vyšší prioritu. A zvážil bych vyhazování výjimky v případě, že stejně jako getter se jmenuje i nějaká metoda. Pošleš pull request?

Minimálně do 2.0.* by se ta priorita měla otočit. V masteru by to mohlo zůstat tak jak to je, ne?

Editoval HosipLan (28. 8. 2012 15:49)

hrach
Člen | 1834
+
0
-

Imo bych dal getteru prednost vzdy.