Problém s přesměrování – scalar error
- sumiisakua
- Člen | 36
Mám formulář, v kterém si uživatel zaklikne checkboxy a odešle.
Po odeslání a zprocování má proběhnout redirect:
$this->add = "?add[]=9&add[]=14&add[]=20";
$this->getPresenter()->redirect("this$this->add");
Toto končí chybou:
Invalid value for parameter ‚add‘, expected scalar.
Problém je v zápisu add[], jelikož se to Nette nelíbí
[].
Jak byste toto řešili vy?
[] musím použít, jelikož bez jejich použití se vezme jen poslní parametr a ostatní se vymažou.
Updatnul jsem na 2.1 a zde už to bohužel nejde. Dřív v tomto zápisu nebyl problém.
Editoval sumiisakua (13. 3. 2012 15:08)
- sumiisakua
- Člen | 36
Pilec: Stejná chyba.
$id = array(3) [
0 => "24" (2)
1 => "15" (2)
2 => "25" (2)
]
$this->getPresenter()->redirect("this", array('add' => $id));
Jediné řešní mě napadlo, že bych nesestavoval url do tvaru: ?add[]=9&add[]=14&add[]=20, ale ?add=9–14–20. Toto řešení mi přidá do zprocování pouze jeden řádek, a to explode(„-“, $add).
PS: Tlačítko inline code nefunguje → při jeho využití a odeslání postu se text mezi `` nijak neodlišší.
Editoval sumiisakua (13. 3. 2012 17:14)
- MartinitCZ
- Člen | 580
Vyřešil toto někdo? Mám podobný problém jen stim rozdílem, že nemohu použí toto (ani s tim to nefunguje):
Čelo napsal(a):
Máš u patřičných metod uvedené, že parametr add je array?
public function renderDefaultCiCo(array $add) { ... }
Jelikož parametr, který mohu dostat, může být string nebo array.
- Jan Tvrdík
- Nette guru | 2595
martinit wrote:
Vyřešil toto někdo? Mám podobný problém jen stim rozdílem, že (…) parametr, který mohu dostat, může být string nebo array.
public function renderFoo()
{
$param = $this->getParameter('param-name');
}
- MartinitCZ
- Člen | 580
Honzo: Mě spíš jde o vytvoření URL. Řešim v podstatě něco podobného jako v prvním postu.
Formulář, který má vytvořit url s parametrem, který bude obsahovat několik hodnot a poté využít AJAX po submitu.
- MartinitCZ
- Člen | 580
Mám formulář, v kterém si zaškrtneš checkboxy. Po odeslání se zkontoluje, které jsou zaškrtlé a vytvoří to slug pole:
$this->url = array('hugo', 'ondra', 'tomas');
Poté se má provést redirect, ale to vždy končí chybou:
$this->presenter->redirect("Homepage:default", array("url" => $this->url)); //Array to string conversion
POkud si to někdy řešil a víš jak na to, tak budu moc rád za každou radu :)
- Jan Tvrdík
- Nette guru | 2595
Aha, už to chápu. Máš úplně jiný problém, než který se řešil v tomto vláknu. Jedná se o nekompatibilitu Nette 2.0.3 s PHP 5.4 (v PHP 5.3 to funguje v pořádku). Oprava je zahrnuta do verze 2.1-dev a bude zahrnuta do 2.0.4.
Viz issue #546.
- MartinitCZ
- Člen | 580
Honza: aha, tak to se omlouvám, ale přišlo mi to dost podobné ;)
OK budu čekat na novou verzi.
- MartinitCZ
- Člen | 580
Upravil jsem si UI/Presenter.php podle té opravy a vše funguje jak má, ale jen do té doby, než použiji routu.
Vždy končí Warningem:
rawurldecode() expects parameter 1 to be string, array given
$FrontendRouter[] = new Route("[names/<name>/][parts/<id>/]", array(
"presenter" => "Homepage",
"action" => "default",
"name" => array(
Route::VALUE => NULL,
Route::FILTER_IN => function($s) {
if ($s !== NULL) {
return explode('+', $s);
};
return NULL;
},
Route::FILTER_OUT => function($s) {
if ($s !== NULL) {
return implode('+', $s);
};
return NULL;
},
),
"id" => NULL,
));
Výsledkem má být url ve tvaru: /names/tomas+lukas+hugo/
Co je na ní špatně? Děkuji.
Editoval martinit (28. 5. 2012 18:35)