Autor | Zpráva | ||
---|---|---|---|
quatzael Profil |
#1 · Zasláno: 5. 10. 2020, 20:35:26
Ahoj,
měl bych dva dotazy ohledně tvorby formulářů v Symfony 5: 1. GET formulář Mám jednoduchý formulář, který se má odeslat metodou GET. Problém je ten, že Symfony pořád nastavuje atribut name jako pole. Tzn. např. místo jednoduchého name="id" , to vždycky vyrenderuje takto: name="form[id]" .
Mě je to principiálně celkem jedno, jenže to po odeslání dělá hnusnou, nepřehlednou a dlouhou URL: /?form%5Bid%5D=159
Je nějaký "normální" způsob jak to obejít? 2. Potřeboval bych do formuláře mezi jednotlivé inputy nějak flexibilně přidávat HTML elementy. Mám vytvořenou třídu (FormType): 1class InfoType extends AbstractType class InfoType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('jmeno')
->add('prijmeni')
/* tady bych například potřeboval vložit nějaký HTML kód */
->add('email') /* Případně i nějaký HTML kód dovnitř struktury elementu form-group */
->add('telefon')
;
}
} Ve twigu mám jednoduše tento kód: 1 {% form_theme info_form 'bootstrap_4_layout.html.twig' %} {% form_theme info_form 'bootstrap_4_layout.html.twig' %}
{{ form_start(info_form, {'attr': {'id': 'form-info','class': 'form-inline'}}) }}
{{ form_end(info_form) }} A vytváří to takovouto strukturu: 1<div class="form-group"> <div class="form-group">
<input type="text" id="info_jmeno" name="info[jmeno]" />
<label for="info_jmeno">Jméno</label>
</div> Toto je samozřejmě jen příklad. Ale když mám v třídě InfoType takto nadefinovaných třeba 50 inputů a chci pouze mezi některé (nebo k některým) vložit část HTML kódu, jakým jednoduchým způsobem je toto možné provést?
Děkuji. |
||
Kcko Profil |
#2 · Zasláno: 5. 10. 2020, 22:26:43
quatzael:
Zlatý Nette, od kterýho si utekl ;-) Proč se ptáš tady a ne na fóru pro Symfony? |
||
quatzael Profil |
#3 · Zasláno: 6. 10. 2020, 01:44:57
Kcko:
Hmm ok. Mohl bys teda prosím aspoň uvést link na to tajné Symfony forum, které nejde ani vygooglit? Fyi, já jsem nikdy u Nette naštěstí nebyl, takže ani není odkud utíkat.. :o) |
||
Ikki Profil |
#4 · Zasláno: 6. 10. 2020, 02:34:55
quatzael:
symfony.com/community |
||
Firibix Profil |
#5 · Zasláno: 6. 10. 2020, 09:36:05
Reakce na quatzaela:
Buď si můžeš napsat úplně vlastní šablonu pro renderování formulářů, nebo vykreslovat políčka toho konkrétního formuláře ručně: 1{{ form_start(form) }} {{ form_start(form) }}
{{ form_errors(form) }}
<div class="policko">
{{ form_label(form.jmeno) }} <!-- popisek pole -->
{{ form_widget(form.jmeno) }} <!-- samotný input -->
<small>{{ form_help(form.jmeno) }}</small> <!-- nápověda -->
{{ form_errors(form.jmeno) }} <!-- chyby validace -->
</div>
<!-- a tak dále pro ostatní pole -->
{{ form_end(form) }} Pokud by byla až takhle velká manuální kontrola overkill, můžeš nechat šablonu vykreslit to, co je uvnitř výše uvedeného div.policko automaticky, a případně mezi jednotlivé inputy vkládat další kód:
1{{ form_start(form) }} {{ form_start(form) }}
{{ form_errors(form) }}
{{ form_row(form.jmeno) }}
<!-- sem klidně nejaké další HTML -->
{{ form_row(form.prijmeni) }}
<!-- … -->
{{ form_end(form) }} Viz dokumentace Symfony. Reakce na Kcka: Ptáš se tazatelů v kategorii Databáze na webu, proč se neptají na fóru MySQL? |
||
quatzael Profil |
#6 · Zasláno: 7. 10. 2020, 10:18:15
Firibix:
Ok, díky za odpověď. Přes ten Twig to upravovat docela jde. Kromě toho problému s tou metodou GET, ale to je menší formulář, takže to když tak udělám úplně manuálně.. |
||
Amunak Profil |
#7 · Zasláno: 7. 10. 2020, 11:27:11
quatzael:
> Symfony pořád nastavuje atribut name jako pole. Tzn. např. místo jednoduchého name="id" , to vždycky vyrenderuje takto: name="form[id]" .
> Mě je to principiálně celkem jedno, jenže to po odeslání dělá hnusnou, nepřehlednou a dlouhou URL: /?form%5Bid%5D=159
> Je nějaký "normální" způsob jak to obejít? Tohle je feature která Symfony umožňuje formulář vůbec zpracovat. Je to obecně best practice u PHP formulářů - jdou pak z $_GET / $_POST „vytáhnout“ jednoduše přes jediný klíč ($_GET['form_name'] ) a jde tak třeba detekovat zda se odeslalo více polí než existuje v definici formuláře. Kdyby to bylo všechno rovnou v "rootu" těch přijatých proměnných, nefungovalo by to. Silně bych doporučil to takto nechat; nejlepší co s tím jde udělat je dát tomu formuláři name s jediným znakem. Většina prohlížečů stejně parametry v URL znevýrazňuje a běžný uživatel opravdu neřeší jestli tam je ?form[field]=hello nebo ?field=hello .
„2. Potřeboval bych do formuláře mezi jednotlivé inputy nějak flexibilně přidávat HTML elementy.“ Jen doplním: pokud se tvé úpravy netýkají pouze tohoto formuláře ale jde např. o integraci do frontendového frameworku bylo by vhodné použít nějaký Form Theme - buď existující (třeba pokud používáš Bootstrap) nebo vlastní. Tohle "manuální vykreslování" je vhodné pouze pokud jde o jednu samostatnou aplikaci takového formuláře. |
||
Časová prodleva: 4 roky
|
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.
Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:
Běda vám, jestli to bude blábol.
0