Předání parametru do továrničky
- cafesk8
- Člen | 103
Zdravím,
nedaří se mi do komponenty předat id, které přidávám jako parametr v latte
latte
{control editVehicleForm, $vehicle['id']} // ano ID je správně integer číslo
presenter
final class VehiclesPresenter extends BasePresenter {
public function renderEdit($id) {
$this->template->vehicle = $this->vehicleRepository->find($id);
}
protected function createComponentEditVehicleForm($vehicle_id) {
return $this->editVehicleFormFactory->create($vehicle_id, function () {
$this->flashMessage('Vůz byl úspěšně editován.');
$this->redirect('Vehicles:default');
});
}
}
FormFactory
declare(strict_types=1);
use Nette;
use Nette\Application\UI\Form;
use Nette\Security\User;
Use App\Forms\FormFactory;
final class EditVehicleFormFactory {
use Nette\SmartObject;
/** @var FormFactory */
private $factory;
public function __construct(FormFactory $factory) {
$this->factory = $factory;
}
public function create($vehicle_id, callable $onSuccess): Form {
$form = $this->factory->create();
$form->addTextArea('info', $vehicle_id); // zde je problém, vždy mi to vrátí "editVehicleForm" namísto ID které předávám do komponenty v latte
$form->addSubmit('add_vehicle', 'Přidat');
$form->onSuccess[] = function (Form $form, \stdClass $values) use ($onSuccess) {
// zde to nejak zpracuji
$onSuccess();
};
return $form;
}
}
Jedná se mi hlavně o to, abych mohl z DB vybrat dle ID řádek a naplnit defaultní hodnoty formuláře. Nenapadá Vás co dělám špatně?
Děkuji
- David Matějka
- Moderator | 6445
ahoj, zapis
{control editVehicleForm, $vehicle['id']}
nepredava ID do createComponent, ale do render metody te komponenty. ale stejne to nepouzivej.
jsou v zasade dve situace, kdy se predava ID do komponenty a s nimi i prislusne postupy:
- na strance je vice instanci komponenty, kazda pro jine ID – v takovem pripade pouzij multiplier
- na strance je jedna komponenta – to je i tvuj pripad. v takovem pripade je ID obvykle soucasti nejakeho parametru requestu a k tomu se dostanes pres metodu getParameter, v tvem pripade to bude vypadat:
protected function createComponentEditVehicleForm() {
return $this->editVehicleFormFactory->create($this->getParameter('id'), function () {
$this->flashMessage('Vůz byl úspěšně editován.');
$this->redirect('Vehicles:default');
});
}