Need a better example for contributte/forms-bootstrap
- Cupara
- Member | 90
I'm trying to implement contributte/forms-bootstrap so I can style the forms better than what they are. The problem I'm running into is that the guides @Infanticide0 directed me to are incomplete as I learn new frameworks by seeing example usage especially when it comes to using composer. If anyone could please provide me with a better detailed step-by-step guide on implementing contributte/forms-bootstrap I would greatly appreciate it.
- Infanticide0
- Member | 103
@Cupara
You use BootstrapForm just like Nette Forms because
class BootstrapForm extends Form
example:
public function createComponentSignUpForm(): BootstrapForm
{
$form = $this->formFactory->create(); // returns new BootstrapForm instance with some predefined configuration (V5, ajax, renderMode)
$form->addText("name", "name")
->setRequired("enter your name");
$form->addEmail("email", "E-mail")
->setRequired("enter email");
$passwordInput = $form->addPassword("password", "Password")
->setRequired("enter password");
$form->addPassword("password2", "password")
->setRequired("enter password")
->addRule(Nette\Forms\Form::EQUAL, "Passwords must be the same", $passwordInput);
$form->addSubmit("signup", "Sign up")
->setHtmlAttribute("class", "btn btn-primary");
$form->onSuccess[] = [$this, "onSignUp"];
return $form;
}
Last edited by Infanticide0 (2023-12-28 12:21)
- Infanticide0
- Member | 103
getParameter is Presenter method, you should pass that value to your model.
- Cupara
- Member | 90
@Infanticide0 So I have a problem, I can't figure out why
$this->template->addFilter
section of code doesn't seem
to work.
public function renderShow(): void
{
$this->template->contact = $this->facade
->createComponentContactForm();
$this->template->addFilter('formPair', function ($control) {
$renderer = $control->form->renderer;
$renderer->attachForm($control->form);
return $renderer->renderPair($control);
});
}
And in my template is this:
{block content}
<div class="p-1">
<form>
{$form['name']|formPair|noescape}
{$form['email']|formPair|noescape}
{$form['message']|formPair|noescape}
{$form['submit']|formPair|noescape}
</form>
</div>
{/block}
This is the error
LogicException: Filter 'formPair' is not defined.
- Infanticide0
- Member | 103
How do you use this?
$this->template->contact = $this->facade->createComponentContactForm();
Create component in presenter (it's lazy loaded when needed), your facade
should be rather ContactFormControlFactory creating new instance of
ContactFormControl.
https://doc.nette.org/…n/components#…
You can render forms in many ways
{control controlname}
or
{form formcontrolname}...{/form}
or
<form n:name="controlname">
<label n:name="inputname"/>
<input n:name="inputname">
or
{input inputname}
</form>
https://doc.nette.org/…ms/rendering
Last edited by Infanticide0 (2023-12-29 04:47)