Formulářová komponenta neprovede redirect po submitu
- theacastus
- Člen | 81
Zdravím,
podle článku na planette o formulářích jako komponentách jsem si napsal prví 2 formuláře (edit a add), bohužel dva protože každý vyžaduje vlastní template (vykresuji různé věci v každém formuláři). No a v presenteru mám navěšený callback s redirectem, ten se ale neprovede ať dělám co dělám.
Formulář je odeslaný běžným requestem (ne ajaxově).
Komponenta formuláře (zkrácená):
<?php
namespace App\Forms\FTP;
use App\Model\Managers\FTPManagerException;
class CreateFTPUserForm extends Control
{
public $onSuccess;
public function createComponentCreateFTPUserForm()
{
$form = new Form();
...
$form->onSuccess[] = [$this, 'processForm'];
return $form;
}
public function processForm(Form $form, $values)
{
$data = $form->getValues(true);
$userPackages = $this->packageManager->getUserPackages($this->user->getId());
foreach ($userPackages as $key => $package)
{
if ($key == $data['tarif']) {
$packageLimit = $this->packageManager->getPackageLimits($package);
$freeLeft = $packageLimit[$package['tarif_id']]['ftp_num'] - $this->ftpManager->getPackageCount($package['id']);
break; // exit foreach
}
}
if ($freeLeft < 1)
{
$form->addError('Pro zvolený balíček již nemáte volné FTP účty.');
return; // exit function
}
try {
$this->ftpManager->saveFTP($data, $this->user->getId());
} catch (FTPManagerException $e) {
$form->addError($e->getMessage());
}
}
}
interface ICreateFTPUserFormFactory
{
/**
* @return CreateFTPUserForm
*/
public function create();
}
A výřez z presenteru:
<?php
namespace App\Presenters;
use App\Forms\FTP\ICreateFTPUserFormFactory;
use App\Forms\FTP\IEditFTPUserFormFactory;
class FTPEditPresenter extends BasePresenter
{
/**
* @var ICreateFTPUserFormFactory @inject
*/
public $createFTPUserFormFactory;
/**
* @var IEditFTPUserFormFactory @inject
*/
public $editFTPUserFormFactory;
...
public function createComponentCreateFTPUserForm()
{
$form = $this->createFTPUserFormFactory->create();
$form->onSuccess[] = function ()
{
$this->redirect('FTPList:default');
};
return $form;
}
public function createComponentEditFTPUserForm()
{
$form = $this->editFTPUserFormFactory->create();
$form->onSuccess[] = function ()
{
$this->redirect('FTPList:default');
};
return $form;
}
}
Ale redirect $this->redirect('FTPList:default');
se prostě
neprovede. Myslím že se ani nevolá callback který je v presenteru.
Vidí někdo co dělám špatně ?
- David Matějka
- Moderator | 6445
ahoj, vytvoril si v tve komponente event $onSuccess
, napojujes
se na nej, ale nikde ho nevolas. jde totiz o jiny onSuccess, nez ten
formularovy.
staci, abys za radek
$this->ftpManager->saveFTP($data, $this->user->getId());
umistil neco jako
$this->onSuccess($this);
- theacastus
- Člen | 81
Díky moc, zatím jsem se spokojil s tímto:
$this->onSuccess($this);
Funguje to a moc se mi nechce to předělávat na něco jiného, tohle byl jeden řádek do každé továrničky, to bylo celkem milé :D