Pojďte otestovat Nette 2.4 RC

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Pavel Kravčík
Člen | 1182
+
+1
-

Jen tak z hlavy hádám, nedalo by se na to použít tohle? Ušetříš si práci.

forms:
	messages:
		FILLED: Vyplňte chybějící údaj.
		REQUIRED: Díky nařízení EU a Nette 2.4 je tato hláška povinná.
Ages
Člen | 128
+
0
-

Aktualizoval jsem projekt a narazil jsem na problém u formulářů:

...
$form->addText('price', 'Prodejní cena:')
                ->setRequired()
                ->addRule(Form::FLOAT, 'Cena musí být číslo');
...

Vygeneruje:

...
<input type="number" name="price" id="frm-productForm-price" required data-nette-rules='[{"op":":filled","msg":"This field is required."},{"op":":float","msg":"Cena musí být číslo"}]' class="text">
...

Do formuláře pak jdou zadat pouze celá čísla, dal by se přidat atribut ->setAttribute('step', 0.001) ale to asi nebude správné řešení.

David Grudl
Nette Core | 8136
+
+2
-

@Ages hmm to je fail, revertnul jsem nastavování number pro float.

Landsman
Člen | 152
+
0
-

enumag napsal(a):

@erikbalog O tom se ví… je potřeba akorát přehodit tenhle commit do starší větve Kdyby/Doctrine.

Když jsem si to tam dal „na prasáka“ ručně, tak to stejně hlásí :[

Landsman
Člen | 152
+
+1
-

@DavidGrudl „použijete makro {includeblock}, které nahrazuje podobné makro {import} (importuje jen bloky a ne obsah okolo)“ … dívám se, že import se chová jinak – neposílá data z „rodiče“ do includovaného „potomka“, to si nyní musím vše manuálně posílat :/ ?

igor.pocta
Člen | 100
+
0
-

Ahoj,

pro výpis jsem doteď používal {$comment->content|noescape|nl2br} a po přechodu na 2.4 mi bylo doporučeno nl2br (deprecated) nahradit za breaklines.

Dříve mi šlo komentář zadat jako plaintext (nl2br minahradilo odřádkování za <br>) tak i formou HTML komentáře. Teď když zadám oba filtry, zobrazí se mi text vč. tagů. Když vynechám noescape, HTML kód se zobrazí správně ale komentáře bez HTML už nejsou odřádkované.

Nějaký tip jak to vyřešit?

GEpic
Člen | 562
+
+1
-

David Grudl napsal(a):

@Ages hmm to je fail, revertnul jsem nastavování number pro float.

Navíc jsem si všiml, že do input number jde zadat písmenko ‚e‘, je to taktéž ohlídané? :)

viz – http://stackoverflow.com/…e-entered-in

Editoval GEpic (6. 7. 2016 5:08)

David Grudl
Nette Core | 8136
+
+3
-

Landsman napsal(a):

import se chová jinak – neposílá data z „rodiče“ do includovaného „potomka“, to si nyní musím vše manuálně posílat :/ ?

Můžeš nějaký konkrétní příklad?

igor.pocta napsal(a):

…tak i formou HTML komentáře. Teď když zadám oba filtry, zobrazí se mi text vč. tagů. Když vynechám noescape, HTML kód se zobrazí správně ale komentáře bez HTML už nejsou odřádkované.

Nějaký tip jak to vyřešit?

Včetně tagů to dříve fungovalo bez záruky a tagy to mohlo rozbít, pokud v nich bylo odřádkování, proto to nyní tagy nepodporuje. Pokud chceš tohle riziko vzít na sebe, je nejsnazší si přidat nl2br znovu:

$latte->addFilter('nl2br', 'nl2br');

GEpic napsal(a):

Navíc jsem si všiml, že do input number jde zadat písmenko ‚e‘, je to taktéž ohlídané? :)

Je to hlídané.

Zuben45
Člen | 268
+
0
-

radas napsal(a):

čímž se zobrazí zbytečně hlášky dvě. Není to škoda?

co to pořešil přes condition a Form::FILLED ?

$this->addText('identifier', 'Identifier')
  ->setRequired('Položka "%label" musí být vyplněná.')
  ->addCondition($form::FILLED)
    ->addRule(self::PATTERN, 'Položka "%label" musí obsahovat 7 číslic.', '([0-9]\s*){7}');
David Grudl
Nette Core | 8136
+
0
-

Ty hlášky se nikdy nezobrazují najednou.

radas
Člen | 221
+
0
-

@Zuben45 Jasně, takhle jsem to měl dříve pro Nette 2.3. Ale když David psal, že se tím dá nahradit právě addCondition($form::FILLED)…

David Grudl
Nette Core | 8136
+
0
-

Samozřejmě se to dá nahradit, vraž tam setRequired(FALSE) a nic se nemění.

Btw https://forum.nette.org/…-abc-in-form#…

radas
Člen | 221
+
0
-

Ahoj,
hodil jsem jednoduchý web bez databáze na Nette 2.4 (z 2.3.10), na localhostu funguje bez problémů pod PHP 5.6 i 7.0, ale na hostingu (station.cz, PHP 5.6) to vždy skončí bílou obrazovkou s textem „Web … neodeslal žádná data. ERR_EMPTY_RESPONSE“ (ve všech prohlížečích). Co jsem našel tady na fóru, tak v některé ze starších verzí Nette pomohlo vypnout v .htaccess opcache, což jsem udělal, ale bez výsledku. Requirements Checker je taky stejný u mě jako na tom hostingu. Nevíte někdo, čím by to mohlo být, že 2.3.10 jede OK a 2.4.0 ne? Díky.

filip.v
Člen | 1
+
0
-

@radas Skontroluj, či je na hostingu povolené sqlite (extension). Niečo podobné som riešil na php5.sk hostingu, kde to majú zakázané a web preto nenabehol.

radas
Člen | 221
+
0
-

PDO extension – Available drivers: mysql sqlite

Maxell92
Člen | 38
+
0
-

Ahoj, jaké je prosím korektní řešení pro Incompatible context? David zmiňuje „použijete u bloku filtr“, ale nevím jak :(

Layout.latte:

<script type="text/javascript">
	var google_tag_params = {
		ecomm_pagetype: '{block remarketingPage}other{/block}',
		{ifset #remarketingProductIdSet}ecomm_prodid: {block remarketingProductId}{/block},{/ifset}
		{block remarketingPrice}{/block}
		{ifset #remarketingCategorySet}comm_category: '{block remarketingCategory}{/block}',{/ifset}
	};
</script>

V šabloně mám poté {block remarketingPage}category{/block}, což nefunguje.

Zkoušel jsem to i filtrem stripTags: {block remarketingPage|striphtml}other{/block}, ale nic. Zatím jsem to vyřešil tak, že v šabloně to obalím také do script:

<script type="text/javascript">
{block remarketingPage}category{/block}
</script>

Lepší nápad? :)

Paimutan
Člen | 33
+
0
-

Ahoj, po upgradu na 2.4 je mi vyhozena chybovka

Use of undefined constant AKTUALITY_LIMIT - assumed 'AKTUALITY_LIMIT'
File: .../vendor/nette/di/src/DI/DependencyChecker.php:111

Vadí mu zřejmě použití konstanty jako defaultní hodnoty v této metodě jedné mé servicy:

<?php
public function getAktuality($limit = AKTUALITY_LIMIT)
{
	//...
}
?>

Konstantu mám nadefinovanou v config.neon (ke kterému se ve chvíli vyhození chyby dichecker zřejmě nedostal?).

David Grudl
Nette Core | 8136
+
0
-

Ano, je to tím, že ke kompilaci dochází dřív, než k definici konstant (konstanty vytváří až zkompilovaný kontainer).

Nejlepší by bylo konstanty, na kterých závisí samotné definice tříd, definovat v bootstrapu ještě před kompilací kontaineru.

ic
Člen | 430
+
0
-

Maxell92 napsal(a):

pokud je block uvnitř scriptu, tak něco podobného řeším přidáním {contentType javascript} na začátek souboru s definicí bloku

Gappa
Nette Blogger | 199
+
0
-

Ahoj,

z API dokumentace verze 2.4 zmizela část s Nette\Utils\DateTime – přitom ale v balíku je.

Je to chyba, nebo jsem něco přehlédl? :)

David Grudl
Nette Core | 8136
+
0
-

Je to chyba, ale důvod netuším.

Maxell92
Člen | 38
+
0
-

ic napsal(a):

pokud je block uvnitř scriptu, tak něco podobného řeším přidáním {contentType javascript} na začátek souboru s definicí bloku

Teď tomu nerozumím. V té šabloně je něco takového:

<?php
{block title}{$page->translate()->title}{/block}
{block remarketingPage}home{/block}

{block content}
<div class="full-width" id="homepage-content"> ... </div>
?>

Pouze block „remarketingPage“ má mít contentType javascript, ostatní je HTML.

Stejně tak layout.latte je layout celé stránky (tedy HTML context) a jen ten blok „remarketingPage“ je uvnitř JS.

David Grudl
Nette Core | 8136
+
0
-

Vhodnější by bylo místo bloků definovat proměnné přes {var} a ty pak v tom JS kódu použít. Bez uvozovek kolem.

radas
Člen | 221
+
0
-

radas napsal(a):

Ahoj,
hodil jsem jednoduchý web bez databáze na Nette 2.4 (z 2.3.10), na localhostu funguje bez problémů pod PHP 5.6 i 7.0, ale na hostingu (station.cz, PHP 5.6) to vždy skončí bílou obrazovkou s textem „Web … neodeslal žádná data. ERR_EMPTY_RESPONSE“ (ve všech prohlížečích). Co jsem našel tady na fóru, tak v některé ze starších verzí Nette pomohlo vypnout v .htaccess opcache, což jsem udělal, ale bez výsledku. Requirements Checker je taky stejný u mě jako na tom hostingu. Nevíte někdo, čím by to mohlo být, že 2.3.10 jede OK a 2.4.0 ne? Díky.

Tak se bohužel potvrdilo, že za to může suhosin. Netuší někdo, která jeho direktiva by to mohla způsobovat? A že jich je… :-(

Maxell92
Člen | 38
+
0
-

David Grudl napsal(a):

Vhodnější by bylo místo bloků definovat proměnné přes {var} a ty pak v tom JS kódu použít. Bez uvozovek kolem.

A dokážu dostat tu proměnnou do nadřazené šablony? Když tu proměnnou vytvořím uvnitř bloku, tak layout.latte ji nevidí.

David Grudl
Nette Core | 8136
+
0
-

Definuj ji ještě před bloky.

Lukeluha
Člen | 130
+
0
-

Ahoj,

vytvořil jsem si v projektu komponentu class UserFormControl extends Nette\Application\UI\Control, ta má v konstruktoru nějaké závislosti, registruju ji do configu. Dále v ní mám vytvoření formuláře a metodu render, kde jen nastavím šablonu a poté renderuji. Poté v presenteru injektuji tuto komponentu, dále tam mám metodu createComponentUserForm, která pouze vrací injektnutou komponentu (return $this->userFormControl). V šabloně poté volám {control userForm} a toto volání mi vyhodí chybu App\Controls\UserFormControl::getReflection() is deprecated in .... Konkrétně je pak ve vygenerovaném kódu toto: $_tmp = $this->global->uiControl->getComponent("userForm");. No a konečně v souboru /nette/application/src/Application/UI/Component.php:129 je volání metody getReflection.

Zajímalo by mě, proč se v této třídě používá deprecated metoda, popř. co dělám blbě?

Díky :)

David Grudl
Nette Core | 8136
+
+2
-

Můžeš zkusit to nahodit do čistého web project a dát na GitHub nebo někam ke stažení?

Lukeluha
Člen | 130
+
+2
-

David Grudl napsal(a):

Můžeš zkusit to nahodit do čistého web project a dát na GitHub nebo někam ke stažení?

Odkaz na github. Vytvořená komponenta a vykreslení v šabloně

Kdyžtak tady je ten řádek kódu přímo v Nette\Application

Oproti mému projektu, kde ji používám, jsem ji osekal o všechny závislosti a nepodstatné věci, ale vyjímku to vyhazuje stejnou.

Editoval Lukeluha (21. 7. 2016 9:31)

filsedla
Člen | 101
+
0
-

Ahoj, mám následující situaci:

{snippetArea}
<form n:name="form">
    {snippet payment}
    	<label n:name="pm" n:class="control-label, $form['pm']->isRequired() ? wt-required">Platba:</label>
		...
    {/snippet}
</form>
{/snippetArea}

Po přechodu na 2.4 dostávám Undefined variable: form hned po načtení stránky. Bez snippetu payment vše funguje. Snippet ale potřebuji kvůli pozdějšímu překreslování ajaxem. Dál v šabloně je manuálně renderovaný radiolist, který taky potřebuje proměnnou $form.

n:name pole uvnitř snippetu úspěšně přistupují k formu přes end($this->global->formsStack), ale je to to, co použít?

Pavel Kravčík
Člen | 1182
+
0
-

Jen tak pro zajímavost, jaký má tohle význam?

$container->getByType('Nette\Application\Application')->run();
$container->getByType(Nette\Application\Application::class)->run();
Milo
Nette Core | 1283
+
+1
-

Pavel Kravčík napsal(a):

Jen tak pro zajímavost, jaký má tohle význam?

$container->getByType('Nette\Application\Application')->run();
$container->getByType(Nette\Application\Application::class)->run();

Lepší sémantika. Funkčně žádný.

Pavel Kravčík
Člen | 1182
+
0
-

Ok a hloupý dotaz. Nevolá se třída dvakrát? Tj. poprvé aby získal string a pak z toho stringu vytvořila třída? Tj. že první způsob je o 0,00000000001 rychlejší? Moc tomu nerozumím, jen mi to zajímá.

jiri.pudil
Nette Blogger | 1028
+
0
-

@PavelKravčík viz http://php.net/…p5.basic.php#…

The class name resolution using ::class is a compile time transformation. That means at the time the class name string is created no autoloading has happened yet.

Kacer_Bob
Člen | 7
+
0
-

@Milo @PavelKravčík druhý způsob dokážou využít IDE když např. hledáš všechna použití konkrétní třídy.

hrach
Člen | 1834
+
+4
-

Druhy zpusob v PhpStormu s return type pluginem automaticky zacne korekntne napovidat metody vraceneho objektu.

je treba mensi konfiguraci:

{
	"methodCalls": [
		{
			"class": "\\Nette\\DI\\Container",
			"method": "getByType",
			"position": 0
		}
	]
}

je treba ulozit do souboru se jmenem dynamicReturnTypeMeta.json, ktery das treba do .idea adresare.

pepakriz
Člen | 246
+
0
-

hrach napsal(a):

Druhy zpusob v PhpStormu s return type pluginem automaticky zacne korekntne napovidat metody vraceneho objektu.

Už nějakou dobu to jde i bez pluginu. Viz https://confluence.jetbrains.com/…ced+Metadata

Lukeluha
Člen | 130
+
0
-

David Grudl napsal(a):

Můžeš zkusit to nahodit do čistého web project a dát na GitHub nebo někam ke stažení?

Tak už jsem přišel, v čem je chyba… Mnou vytvářená komponenta samozřejmě dědí od Nette\Application\UI\Control. Já jsem ve své třídě používal traitu Nette\SmartObject která je ovšem používána již v některém rodiči Controlu. Když jsem ji tam vložil, tak to vypadá, že se nějak pomlátily a vyhazovalo mi to tyto chyby. Po odstranění je vše ok :)

Pavel Kravčík
Člen | 1182
+
0
-

@jiri.pudil, @Kacer_Bob: Díky.

David Grudl
Nette Core | 8136
+
+1
-

Gappa napsal(a):

z API dokumentace verze 2.4 zmizela část s Nette\Utils\DateTime

Už jsem přišel na to, kde je chyba. PHP-Token-Reflection, který používá ApiGen, nepodporuje výrazy v konstantách, které existují od PHP 5.6, a Andrewsville není schopen ani po roce přijmout PR s fixem. Takže teď generuji dokumentaci forkem a už by to mělo být ok.

Gappa
Nette Blogger | 199
+
0
-

David Grudl napsal(a):

Gappa napsal(a):

z API dokumentace verze 2.4 zmizela část s Nette\Utils\DateTime

Už jsem přišel na to, kde je chyba. PHP-Token-Reflection, který používá ApiGen, nepodporuje výrazy v konstantách, které existují od PHP 5.6, a Andrewsville není schopen ani po roce přijmout PR s fixem. Takže teď generuji dokumentaci forkem a už by to mělo být ok.

Díky za opravu.

flamengo
Člen | 131
+
0
-

Ahoj, asi to bude nějaká prkotina, ale mě se u Nette 2.4 neukládají chyby v HTML formátu do složky log (na localhostu). Nebo je třeba někde něco donastavit?

Editoval flamengo (7. 8. 2016 14:53)

David Matějka
Moderator | 6445
+
+1
-

@flamengo ladenky se loguji pouze pokud nejsou vykreslene. takze v debug modu k jejich logovani nedochazi, jelikoz se rovnou vykresli (krome napriklad situace, kdy mas jiny content type).

flamengo
Člen | 131
+
0
-

@DavidMatějka Díky za odpověď. Mám ale pocit, že se mi to ukládalo.
Koukám do průběžných záloh projektu, které si dělám a ve složce log/ mívám občas i html laděnky (např. exception–2016–07–04–12–20–f506dec9b8.html). Je to možné vůbec? :)

David Matějka
Moderator | 6445
+
0
-

@flamengo ano, treba u ajaxovych requestu (ale i ty uz se ted kamaradeji s ladenkou). ale v debug rezimu, neajax, html se ladenky neukladaly nikdy

alNath
Člen | 17
+
0
-

Mozno by stalo za zmienku pridat na https://nette.org/en/packages poznamku, ze pri instalacii Nette je nutne patricne upravit selinux policy, pripadne vypnut selinux uplne
setenforce 0

Minimalne co sa tyka instalacie na Fedore, kde je selinux zapnuty by default a v tom pripade sa Nette nerozbehne (hlasi ze "Directory ‚/var/www/html/n/exa/app/../temp/cache‘ not found. " aj ked su nastavene prava chmod -R 777 /var/www/html/n/exa

Tomáš Jacík
Člen | 146
+
0
-

@alNath Vychází to z toho, jak selinux a složka /var/www pod Linuxem fungují. Zkrátka by se do ní nemělo psát, tak si v nette buď přenastav temp folder na jinou složku (v bootstrapu a nejlépe někde ve /var) nebo to prostě necpi do /var/www a udělej si nějakou pěknou strukturu třeba ve složce /srv :)

alNath
Člen | 17
+
0
-

@TomášJacík to nic nemeni na tom ze by o tom mohla byt zmienka, kludne copy & paste toho co si napisal ty. Mne tiez trvalo kym som si to uvedomil kedze napoveda k tomu chyba.

A mimochodom, nehovorim o produkcnom nasadeni, ale o localhoste, na ktorom mi moze byt jedno ci to tempuje do /var, /tmp, /srv,

Editoval alNath (19. 12. 2016 15:51)

David Grudl
Nette Core | 8136
+
+1
-

Tohle téma nepatří do vlákna Pojďme otestovat Nette 2.4. Vytvoř @alNath prosím nové vlákno nebo ideálně rovnou dopiš informace do dokumentace (třeba na https://doc.nette.org/en/quickstart, tj do souboru https://github.com/…started.texy).

radas
Člen | 221
+
0
-

Ahoj,
minulý rok jsem tady psal, že nefunguje Nette 2.4 na PHP (5.6) s rozšířením Suhosin. Bohužel to stále platí i pro poslední release 20170119. Jde o hosting Station.cz s tímto nastavením Suhosinu. Přitom Nette 2.3 nemá problém a funguje krásně. Zkoušel jsem si s tím hrát lokálně, ale direktiv je strašně moc a po dvou dnech mě to přestalo bavit. Netušíte někdo, v čem by mohl být problém, čeho se chytnout? Admini to rozšíření nehodlají vypnout. Tady někdo psal, že by mohlo vadit, když je uvnitř __toString() vyhozena výjimka, zkoušel jsem ji tam odchytit, ale nepomohlo to.

Provozujete někdo web na Nette 2.4 na serveru se Suhosinem?

Díky moc…