Předání parametru do továrničky

cafesk8
Člen | 103
+
0
-

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
+
+4
-

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:

  1. na strance je vice instanci komponenty, kazda pro jine ID – v takovem pripade pouzij multiplier
  2. 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');
    });
}
cafesk8
Člen | 103
+
0
-

Díky moc,

někde jsem tady na foru četl, že z nějakého důvodu není dobré předávat parametry přes getParameter(), skrz ajax možná. Nevím, prozatím to nechám takto.

Děkuji

Editoval cafesk8 (1. 10. 2018 14:22)

CZechBoY
Člen | 3608
+
+1
-

Právě není dobrý předávat parametry přes render. getParameter() můžeš nahradit přes property, kterou naplníš v action metodě.