Formulář jako UI\Control komponenta
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Honza_S
- Člen | 12
S Nette začínám a trochu v tom plavu, poprosil bych o postrčení
správným směrem:
Podle best
practise
mám vytvořenou komponentu OrderForm.php
<?php
namespace AdminModule\Forms;
use Nette\Application\UI,
Nette\Forms\Form;
class OrderForm extends UI\Control
{
private $database;
public function __construct(\Nette\Database\Context $database)
{
$this->database = $database;
}
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/OrderForm.latte');
$template->render();
}
protected function createComponentForm()
{
$form = new UI\Form;
$form->addGroup('Osobní údaje');
$form->addText('jmeno', 'Jméno:')
->setRequired('Zadejte jméno');
$form->addText('prijmeni', 'Příjmení:')
->setRequired('Zadejte příjmení');
$form->addSelect('doklady_1_id', '1. doklad:',$this->database->table('doklady')->fetchPairs('id', 'nazev'));
$form->addSubmit('send', 'Uložit');
return $form;
}
public function fillData($order) {
$this['form']->setDefaults($order->toArray());
// \Nette\Diagnostics\Debugger::dump($this['form']);
}
}
interface IOrderFormFactory
{
/** @return OrderForm */
function create();
}
?>
v config.neon
services:
- AdminModule\Forms\IOrderFormFactory
a v presenteru OrderPresenter
<?php
namespace AdminModule;
use Nette,
Model;
final class OrderPresenter extends BasePresenter
{
/** @var Nette\Database\Context */
public $database;
public function __construct(Nette\Database\Context $database)
{
$this->database = $database;
}
/** @var \AdminModule\Forms\IOrderFormFactory @inject */
public $orderFormFactory;
protected function createComponentOrderForm()
{
$control = $this->orderFormFactory->create();
return $control;
}
public function actionEdit($orderId)
{
$order = $this->database->table('rozvoz')->get($orderId);
if (!$order) {
$this->error('Objednávka nenalezena');
}
$control = $this->orderFormFactory->create();
$control->fillData($order);
}
}
?>
admin/order/create vykreslí prázdný formulář v pořádku
pokud zavolám admin/order/edit?orderId=104 tak se mi stejně vykreslí
prázdný formulář, přitom ten dump ve fillData vypíše správné
hodnoty.
šablona Order.edit.latte obsahuje:
<h1>Editace objednávky</h1>
{control orderForm}
- David Matějka
- Moderator | 6445
mas chybu v actionEdit
$control = $this->orderFormFactory->create();
$control->fillData($order);
ten kod vytvori novou komponentu, kterou naplni daty, ale ne tu, kterou
vytvaris v createComponentOrderForm metode.
uprav na
$this['orderForm']->fillData($order);
- David Matějka
- Moderator | 6445