Předání hodnoty do komponenty
- jarda256
- Člen | 130
Zdravím, potřeboval bych poradit ohledně předání hodnoty do komponenty formuláře. Ale výsledkem je, že se mi vykreslí pouze stránka s hlavičkou ale formulář ne. Na addForm přesměrovámá pomocí n:href=„Site:add $event->id“. Předem děkuji za rady.
add.latte
{block content}
<div id="banner">
<h1 n:block=title>Přidání strany</h1>
</div>
{control createSiteForm $eventId}
{/block}
SitePresenter.php
<?php
namespace App\Modules\Admin\Presenters;
use Nette;
use App\Model;
use App\Forms;
use Nette\Forms\Container;
use App\Presenters\BaseAdminPresenter;
use Zend\Hydrator;
class SitePresenter extends BaseAdminPresenter
{
/** @var Forms\CreateSiteFormFactory @inject */
public $createSiteFactory;
/** @var Forms\EditSiteFormFactory @inject */
public $editSiteFactory;
/** @var Model\Facades\SiteFacade @inject */
public $siteFacade;
public function renderDefault()
{
}
public function renderAdd($id = NULL)
{
$this->template->eventId = $id;
}
public function actionEdit($id = NULL)
{
$site = $this->siteFacade->getSite($id);
if ($site !== NULL)
{
$hydrator = new Hydrator\ArraySerializable();
$site = $hydrator->extract($site);
$this["editSiteForm"]->setDefaults($site);
}
}
/**
* @secured
*/
public function handleDeleteSite($siteId)
{
try {
$this->siteFacade->delete($siteId);
$this->flashMessage('Strana byla úspěšně smazána.', 'success');
} catch (\Exception $exc) {
$this->flashMessage($exc->getMessage(), 'danger');
}
$this->redirect('this');
}
protected function createComponentEditSiteForm()
{
return $this->editSiteFactory->create(function () {
$this->flashMessage("Strana byla úspěšně upravena", 'success');
$this->redirect(':Admin:Event:show');
});
}
protected function createComponentCreateSiteForm()
{
return $this->createSiteFactory->create(function () {
$this->flashMessage("Strana byla úspěšně vytvořena", 'success');
$this->redirect(':Admin:Event:show');
});
}
}
createSiteFormFactory.php
<?php
namespace App\Forms;
use Nette;
use Nette\Application\UI\Form;
use Nextras\Forms\Bridges\NetteDI\FormsExtension;
use Nette\Localization\ITranslator;
use App\Model;
use App\Model\Facades\SiteFacade;
use App\Model\Facades\EventFacade;
class CreateSiteFormFactory
{
use Nette\SmartObject;
/** @var SiteFacade */
protected $siteFacade;
/** @var EventFacade */
protected $eventFacade;
/** @var ITranslator */
private $translator;
/** @var FormFactory */
private $factory;
/** @var Model\Entities\Event */
protected $event;
public function __construct(ITranslator $translator, FormFactory $factory, SiteFacade $siteFacade, EventFacade $eventFacade)
{
$this->translator = $translator;
$this->factory = $factory;
$this->siteFacade = $siteFacade;
$this->eventFacade = $eventFacade;
}
public function render($eventId)
{
$this->event = $this->eventFacade->getEvent($eventId);
}
public function translate($word){
return $this->translator->translate($word);
}
/**
* @return Form
*/
public function create(callable $onSuccess)
{
$form = $this->factory->create();
$form->addCheckbox('visible','Viditelný');
$form->addText('name', 'Název akce')
->setRequired();
$form->addText('ename', 'Název akce anglicky')
->setRequired();
$form->addInteger('price1','Cena 1')
->setRequired();
$form->addInteger('eprice1','ECena 1')
->setRequired();
$form->addInteger('price2','Cena 2');
$form->addInteger('eprice2','ECena 2');
$form->addInteger('price3','Cena 3');
$form->addInteger('eprice3','ECena 3');
$form->addInteger('price4','Cena 4');
$form->addInteger('eprice4','ECena 4');
$form->addInteger('price5','Cena 5');
$form->addInteger('eprice5','ECena 5');
$form->addInteger('placeprice','Cena na miste')
->setRequired();
$form->addInteger('eplaceprice','ECena na miste')
->setRequired();
$form->addInteger('maxmembers','Pocet clenu');
$form->addInteger('carlimit','Pocet aut');
$form->addEmail('email', 'copyMail pri registraci')
->addRule($form::EMAIL);
$form->addProtection('Security token has expired, please submit the form again');
$form->addSubmit('send', 'Vytvořit site');
$form->onSuccess[] = function (Form $form, $values) use ($onSuccess) {
$this->siteFacade->createSite($this->event,$values);
$onSuccess();
};
return $form;
}
}
- jarda256
- Člen | 130
@JaxP napadlo mě řešení, kterým jsem to schopen předat ale né v šabloně, ale už v presenteru
protected $eventId;
public function actionCreate($id = NULL)
{
$this->eventId = $id;
}
protected function createComponentCreateSiteForm()
{
return $this->createSiteFactory->create($this->eventId,function () {
$this->flashMessage("Strana byla úspěšně vytvořena", 'success');
$this->redirect(':Admin:Event:show');
});
}
- jarda256
- Člen | 130
@JaxP Taky bych raději přímou cestu (vypadá lépe), ale bohužel
podle dokumentace je ten zápis správný, ale nefunguje :(
ale bohužel jsem teď dospěl k jinému problému :(
- newPOPE
- Člen | 648
Hosi ale ako pozeram vy to mate cele nejake divne.
Vo factory sice vytvarate form ale pokial viem tak formu sa predat parametre nedaju (edit: ok, da sa to ale nie je to dobre).
Cize bud si dany formular obalit do komponenty alebo tam ten parameter nedavat.
@CZechBoY ma pravdu, predavat si parametre az v sablone nie je moc dobry pristup. Lebo potom na AJAX-e napriklad si tzv. „rozbijete hu**“.
Editoval newPOPE (1. 12. 2016 20:36)