Vykreslenie formulára SignInFormFactory cez Bootstrap3renderer
- procomputer
- Člen | 5
Ahoj, do projektu som pridal https://github.com/…rap3renderer (5* autorom za komponentu). Ak v SignPresenter vykreslujem formulár definovany v createComponentSignInForm() všetko prebehne OK form sa zobrazí v BS3 tagoch. Ale ak chcem vykresliť form definovany v SignInFormFactory síce app nekončí chybou, ale vykreslí sa prázdna obrazovka. Netušíte kde je chyba viz. case 02? Vopred dikes…
case 01:
<?php
class SignPresenter extends Nette\Application\UI\Presenter
{
/** @var \Instante\ExtendedFormMacros\IFormFactory @inject */
public $formFactory;
protected function createComponentSignInForm()
{
$form = $this->formFactory->create();
$form->addText('username', 'Username:')->setRequired('Please enter your username.');
$form->addPassword('password', 'Password:')->setRequired('Please enter your password.');
$form->addSubmit('send', 'Sign in');
$form->onSuccess[] = [$this, 'signInFormSucceeded'];
return $form;
}
?>
case 02:
<?php
class SignPresenter extends Nette\Application\UI\Presenter
{
/** @var \Instante\ExtendedFormMacros\IFormFactory @inject */
public $formFactory;
protected function createComponentSignInForm()
{
$form = $this->formFactory->create(SignInFormFactory::class);
$form->onSuccess[] = [$this, 'signInFormSucceeded'];
return $form;
}
?>
SignInFormFactory
<?php
class SignInFormFactory extends Form
{
/**
* @return Form
*/
public function create()
{
$form = new Form;
$form->addText('username', 'Username:')->setRequired('Please enter your username.');
$form->addPassword('password', 'Password:')->setRequired('Please enter your password.');
$form->addSubmit('send', 'Sign in');
return $form;
}
}
?>
- procomputer
- Člen | 5
ad Extend Form, OK dikes (bol to iba pokus, bez toho to padalo…)
ad config.neon sluzbu mam registrovanu viz. config.neon
ad Bootstrap3renderer aktuálne, ale netuším ako donútit SignPresenter,
vykresliť SignInFormFactory pomocou Bootstrap3renderer. App končí exception
„Call to a member function create() on null“ na riadku $form =
$this->formFactory->create();
Poradíte mi niečo? Vopred dikes
config.neon
services:
- App\Forms\SignInFormFactory
router: App\RouterFactory::createRouter
authenticator: HelpdeskAuthenticator
formFactory: Instante\Bootstrap3Renderer\BootstrapFormFactory
<?php
class SignPresenter extends Nette\Application\UI\Presenter
{
/** @var \App\Forms\SignInFormFactory @inject */
public $signInFactory;
/**
* Sign-in form factory.
* @return Nette\Application\UI\Form
*/
protected function createComponentSignInForm()
{
$form = $this->signInFactory->create();
$form->onSuccess[] = [$this, 'signInFormSucceeded'];
return $form;
}
?>
<?php
class SignInFormFactory
{
/** @var \Instante\ExtendedFormMacros\IFormFactory @inject */
public $formFactory;
public function create()
{
$form = $this->formFactory->create();
$form->addText('username', 'Username:')->setRequired('Please enter your username.');
$form->addPassword('password', 'Password:')->setRequired('Please enter your password.');
$form->addSubmit('send', 'Sign in');
return $form;
}
}
?>
- procomputer
- Člen | 5
Tak už som to vyriešil… Dikes za rady
<?php
namespace App\Forms;
use Instante\Bootstrap3Renderer\BootstrapFormFactory;
class SignInFormFactory
{
/**
* @return Form
*/
public function create()
{
$form = (new BootstrapFormFactory)->create();
$form->addText('username', 'Username:')->setRequired('Please enter your username.');
$form->addPassword('password', 'Password:')->setRequired('Please enter your password.');
$form->addSubmit('send', 'Sign in');
return $form;
}
}
?>
Editoval procomputer (31. 3. 2017 20:58)
- CZechBoY
- Člen | 3608
jasne, v obycejne tride nefunguji injecty – je potreba použít konstruktor.
namespace App\Forms;
use Instante\Bootstrap3Renderer\BootstrapFormFactory;
class SignInFormFactory
{
/** @var \Instante\ExtendedFormMacros\IFormFactory */
private $formFactory;
public function __construct(\Instante\ExtendedFormMacros\IFormFactory $formFactory)
{
$this->formFactory = $formFactory
}
/**
* @return Form
*/
public function create()
{
$form = $this->formFactory->create();
$form->addText('username', 'Username:')->setRequired('Please enter your username.');
$form->addPassword('password', 'Password:')->setRequired('Please enter your password.');
$form->addSubmit('send', 'Sign in');
return $form;
}
}