Jak vyvíjet komfotrněji?
Nová verze Nette 2.3.7 přináší spoustu vylepšení, jedno z nich si ale rychle zamilujete. Jsou to chybové hlášky, které se vám pokusí napovědět, pokud uděláte překlep.
Určitě jste už někdy narazili na podobnou chybu:
Chcete v šabloně vykreslit komponentu a ona prý neexistuje. Může to mít celou řadu příčin, od nějakého opomenutí na straně presenteru, až po chybu v šabloně. Nebo se komponenta jmenuje jinak?
Nejhorší ze všeho jsou triviální přelkepy, které nevidíte, takže několikrát prověříte všechny možnosti a strávíte na tom dost času, než chybu odhalíte.
Nejnovější verze Nette má ale šikovnější chybovou hlášku:
Did you mean ‚signInForm‘? Aha! Hned je jasné, že na vině byl překlep a můžete ho rovnou opravit.
Pokud jste se někdy dlouze zasekli na velikosti písmenek, tj. že vám
{control MyComponent}
hlásil chybu Component with name
‚MyComponent‘ does not exist, o to více oceníte dovětek did you
mean ‚myComponent‘?.
Pojďme k Nette\Database. Chybka v názvu databázového sloupce? Opět ji dostanete na stříbrném podnose:
Nette napovídá překlepy v názvech funkcí, metod, proměnných atd. Pokud vyvíjíte v IDE, neměly by se vám podobné chyby stávat, na druhou stranu málokteré IDE dokáže plnohodnotně napovídat třeba v šablonách. Ať už se spletete v názvu filtru nebo makra:
Případně v názvu proměnné:
Hláškou did you mean novinky zvyšující pohodlí nekončí. Nette vás
nově upozorní na celou řadu dalších, dříve špatně odhalitelných, chyb.
Jako například chybějící []
$myForm->onSuccess = [$this, 'myFormSucceeded'];
// namísto správného
$myForm->onSuccess[] = [$this, 'myFormSucceeded'];
nebo chybějící ()
{foreach $form->getErrors as $error}
// namísto správného
{foreach $form->getErrors() as $error}
či docela nebezpečné opomenutí, jelikož
$user->isLoggedIn
je vždy truthy:
{if $user->isLoggedIn} ... něco tajného ... {/if}
// namísto správného
{if $user->isLoggedIn()} ... něco tajného ... {/if}
To nyní povede k varování Did you forget parentheses after isLoggedIn?
Poznámka: pokud záměrně píšete v kódu metodu bez závorek, tj.
$cb = $obj->getItems
, protože chcete využít vlastnosti
Nette\Object, která takto do $cb
uloží callback na metodu
getItems
, a objeví se varování, použijte prosím standardní
PHP zápis, tj. $cb = [$obj, 'getItems']
. Při korektních běžných
použitích se varování nezobrazuje.
Dále Latte vás upozorní, když použijete modifikátor na místě, kde se ignoruje, jako například:
{if $var |filter}
Did you mean „komfortněji“?
Nová verze Nette je tu od toho, aby vám usnadnila a zpříjemnila vývoj. A jak je to napovídání boží si doopravdy uvědomíte,
Chcete-li odeslat komentář, přihlaste se