Formuláře jako továrníčka
- Xchos
- Člen | 40
Zdravím,
snažím se o vytvoření formuláře přes komponentu a továrničku na Vložení nových záznamů a editaci stávajících.
Problém: Potřebuji zprovoznit editaci a založení nové globální
proměnné za pomocí formuláře.
Chyby na které jsem narazil:
- Při editaci formuláře se nezavolá žádný z OnSuccess[]
- do laděnky se mi nezašlou informace z editForm, zatímco newForm je zašle.
Komponenta GlobalsNewEditForm:
<?php
use Nette\Application\UI;
class GlobalsNewEditForm extends Nette\Object
{
private $db;
public function __construct(DibiConnection $db)
{
$this->db = $db;
}
public function create()
{
$form = new UI\Form;
$form->addText('key', 'Klíč:')->addRule(UI\Form::FILLED, 'Zadejte titulek');
$form->addText('value', 'Hodnota:');
$form->addHidden('id', 'id');
$form->onSuccess[] = $this->processForm;
$form->addSubmit('submit', 'Odeslat');
return $form;
}
public function processForm($form)
{
/*
*
*/
}
}
?>
Presenter GlobalsPresenter:
<?php
namespace AdminModule;
use Nette\Application\UI\Form,
Nette\Utils\Strings,
Tracy\Debugger;
class GlobalsPresenter extends SecurePresenter
{
/** @var \GlobalsNewEditForm @inject */
public $GlobalsNewEditForm;
/*
*
*
*/
public function newForm($form){
$this->checkPermission("CREATE");
$data = $form->getValues();
\Nette\Diagnostics\Debugger::barDump($form->getValues());
try
{
$insertID = $this->model->insert($data);
if($insertID>0) $this->logger->logUserEvent($this->user->id, $this->resourcesId, "Přidán nový záznam - ".$this->getName().":".$this->getAction(), 1, $insertID);
else {
$this->flashMessage("Program zabránil vytvoření klíče - Duplikace", "danger");
$this->logger->logUserEvent($this->user->id, $this->resourcesId, "Pokus o duplikaci klíče ".$data->key, 3);
return true;
}
}
catch(Exception $e)
{
$this->logger->logUserEvent($this->user->id, $this->resourcesId, "Chyba přidání - ".$this->getName().":".$this->getAction()." - ".$e->getMessage(), 3);
}
$this->redirect($this->permissionName.":");
return true;
}
public function editForm($form){
\Nette\Diagnostics\Debugger::barDump($form->getValues());
}
public function createComponentNewForm(){
$form = $this->GlobalsNewEditForm->create();
$form->onSuccess[] = $form->onSuccess[] = callback($this, "newForm");
return $form;
}
public function createComponentEditForm(){
$form = $this->GlobalsNewEditForm->create();
$form->setDefaults($this->model->getGlobalById($this->getParam('id')));
$form->onSuccess[] = $form->onSuccess[] = callback($this, "editForm");
return $form;
}
}
Inspirace na ** https://doc.nette.org/…s/form-reuse **
Editoval Xchos (8. 3. 2015 17:11)
- Xchos
- Člen | 40
Ještě pro jistotu dodám
{form editForm class=>"form-horizontal"}
<div class="form-group">{label key class=>"control-label col-lg-3" /}<div class="col-lg-9">{input key disabled=>'disabled'}</div></div>
<div class="form-group">{label value class=>"control-label col-lg-3" /}<div class="col-lg-9">{input value}</div></div>
<div class="form-group">{input submit class=>'btn btn-yellow btn-lg'}</div>
{/form}
- Xchos
- Člen | 40
Tak jsem přišel na to že když místo
{form editForm class=>"form-horizontal"}
<div class="form-group">{label key class=>"control-label col-lg-3" /}<div class="col-lg-9">{input key disabled=>'disabled'}</div></div>
<div class="form-group">{label value class=>"control-label col-lg-3" /}<div class="col-lg-9">{input value}</div></div>
<div class="form-group">{input submit class=>'btn btn-yellow btn-lg'}</div>
{/form}
zavolám jen
{control editForm}
--\
tak to funguje a callback editForm se zavolá. Problém ale je, že potřebuji využít toho původního kvůli stylování.
Editoval Xchos (8. 3. 2015 17:23)
- David Matějka
- Moderator | 6445
muze za to disabled u key. Hodnota se pak neodesle a neprojde to validaci
- Xchos
- Člen | 40
Aha, no a je nějaká možnost jak ji mohu zakázat měnit? Jsou to globální proměnné využívané pak v Latte tak se hodnota klíče nemůže měnit. Napadá mě {input key readonly=>1}, jestli je to moudré? Jinak díky za radu, už funguju jak jsem potřeboval :)
Editoval Xchos (8. 3. 2015 18:02)