Pojďte otestovat Nette 2.4 RC
- Pavel Kravčík
- Člen | 1195
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
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í.
- Landsman
- Člen | 152
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í :[
- igor.pocta
- Člen | 100
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 | 566
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 | 8227
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
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}');
- radas
- Člen | 225
@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 | 8227
Samozřejmě se to dá nahradit, vraž tam setRequired(FALSE)
a
nic se nemění.
- radas
- Člen | 225
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.
- Maxell92
- Člen | 38
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
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 | 8227
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.
- Gappa
- Nette Blogger | 208
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? :)
- Maxell92
- Člen | 38
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 | 8227
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 | 225
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… :-(
- Lukeluha
- Člen | 130
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 | 8227
Můžeš zkusit to nahodit do čistého web project a dát na GitHub nebo někam ke stažení?
- Lukeluha
- Člen | 130
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
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 | 1195
Jen tak pro zajímavost, jaký má tohle význam?
$container->getByType('Nette\Application\Application')->run();
$container->getByType(Nette\Application\Application::class)->run();
- Pavel Kravčík
- Člen | 1195
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 | 1032
@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.
- hrach
- Člen | 1838
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
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
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 :)
- David Grudl
- Nette Core | 8227
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 | 208
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.
- David Matějka
- Moderator | 6445
@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).
- David Matějka
- Moderator | 6445
@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
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 | 147
@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
@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 | 8227
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 | 225
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…