Jak předat parametr z render metody do POSTu
- BuGeR
- Člen | 45
Dobrý den,
vytváříme něco jako souborový systém, kde figurují složky, soubory, a
celé je to uložené v db.
Pokud chceme do složky přidat další složku, tak si předáme v URL ID té
složky, ve které se zrovna nacházíme. Např. example.php/open/2 …
render metoda pak vypadá renderDefault($root_id).
Existuje nějaký způsob, jak předat hodnotu $root_id do ZPRACOVÁNÍ
formuláře, aniž bychom museli použít:
- ActionDefault (action se volá těsně před POST, tudíž se tam ten parametr dostane, to mi ale příjde jako nešťastné řešení, protože Action je vytvořen asi pro jiné účely).
- $form->addHidden(„root_id“)->setValue($root_id) a pak s tím pracovat jako s $values->root_id. Jenže tohle mi příjde taky jako nešťastné řešení. Musí se neustále hlídat, zda si uživatel v prohlížeči neupravil tu hodnotu ve skrytém inputu. Za normalních podmínek by to bylo asi v pořádku, jenže tady v tomto specifickém případě by se muselo neustále kontrolovat, zda má uživatel na to root_id dostatečná práva, atd. a to se mi nechce, když už jsem to jednou udělal v render metodě.
Existuje nějaká jiná alternativa?
Díky!
- ali
- Člen | 342
Ja osobne resim takove veci nejak takto:
final class FolderPresenter extends BasePresenter
{
/** @var int */
private $rootId;
protected function startup()
{
parent::startup()
$this->rootId = (isset($this->params["root_id"]) ? $this->params["root_id"] : NULL);
if ($this->rootId === NULL) {
$this->error(NULL, 404);
// or something else
}
}
...
}
Takto si jednoduse ohlidas existenci promenne a budes ji mit dostupnout ve vsech metodach presenteru.
- CZechBoY
- Člen | 3608
A nešlo by to úplně jinak?
Udělal bych si komponentu speciálně na ten upload, která by měla
persistentní parametr složku, ve které jsi. Při signálu
newFolder!
by se ID složky (persistentní) předalo a nemusíš
řešit nějaký předávání mezi formulářem a presenterem – prostě to
ID předáš vždy (třeba konstruktorem).
- BuGeR
- Člen | 45
CZechBoY napsal(a):
A nešlo by to úplně jinak?
Udělal bych si komponentu speciálně na ten upload, která by měla persistentní parametr složku, ve které jsi. Při signálu
newFolder!
by se ID složky (persistentní) předalo a nemusíš řešit nějaký předávání mezi formulářem a presenterem – prostě to ID předáš vždy (třeba konstruktorem).
Aha, to je taky zajimavá myšlenka. Mohl bych poprosit o nějakou ukázku kódu, jak by to mohlo vypadat?
- CZechBoY
- Člen | 3608
Něco takovýho by mělo snad stačit/fungovat.
class FileManagerControl extends Control
{
/**
* @var int
* @persistent
*/
public $rootDirectoryID;
/**
* @var string $directoryName
*/
public function handleCreateNewDirectory ($directoryName)
{
try {
$newDirectoryID = $this->ioModel->createDir($this->rootDirectoryID, $directoryName);
} catch (IOException $e) {
$this->flashMessage('Nejde to vytvořit :(', 'error');
return;
}
$this->changeDirectory($newDirectoryID);
}
/**
* @var int
*/
public function handleNavigateTo ($directoryID)
{
$this->changeCurrentRootDirectory($directoryID);
}
/**
* @var int $newRootDirectoryID
*/
private function changeCurrentRootDirectory ($newRootDirectoryID)
{
$this->rootDirectoryID = $newRootDirectoryID;
$this->redrawControl('tree'); // strom adresářů
$this->redrawControl('files'); // soubory ve složce
}
}
Editoval CZechBoY (4. 4. 2016 23:18)