Attualmente sto cercando di utilizzare il Componente Modulo Symfony2 nonostante il microframework Silex.Componente Modulo Symfony2 - creazione di campi senza il nome del modulo nell'attributo nome
mio modulo di accesso viene generato come segue:
$app = $this->app;
$constraint = new Assert\Collection(array(
'username' => new Assert\NotBlank(),
'password' => new Assert\NotBlank(),
));
$builder = $app['form.factory']->createBuilder('form', $data, array('validation_constraint' => $constraint));
$form = $builder
->add('username', 'text', array('label' => 'Username'))
->add('password', 'password', array('label' => 'Password'))
->getForm()
;
return $form;
Il problema è che la forma risultante è stato creato come segue:
<fieldset>
<input type="hidden" value="******" name="form[_token]" id="form__token">
<section class="">
<label class=" required" for="form_username">Username</label>
<div><input type="text" value="" name="form[username]" id="form_username" class="text"></div>
</section>
<section class="">
<label class=" required" for="form_password">Password</label>
<div><input type="password" value="" name="form[password]" id="form_password" class="password"></div>
</section>
<section>
<div><button class="fr submit">Login</button></div>
</section>
</fieldset>
Mentre io voglio il nome e l'ID attributi per essere il più segue:
Ho setacciato il Web e ho trovato consigli sull'opzione 'property_path' ma credo che questo abbia a che fare con la classe utilizzata per elaborare i dati quando viene utilizzata nell'attuale framework Symfony2 stesso.
che ho passato i file di componenti forma e il punto come che questo è stato impostato è in:
Symfony/Component/Form/Extension/core/tipo/FieldType.php - linea 71
public function buildView(FormView $view, FormInterface $form)
{
$name = $form->getName();
if ($view->hasParent()) {
$parentId = $view->getParent()->get('id');
$parentFullName = $view->getParent()->get('full_name');
$id = sprintf('%s_%s', $parentId, $name);
$fullName = sprintf('%s[%s]', $parentFullName, $name);
} else {
$id = $name;
$fullName = $name;
}
...
Unforunately the FormFactory utilizza il FormBuilder che quindi funziona con la classe Form e non ho avuto il tempo sufficiente per analizzare l'intero funzionamento interno del componente.
So che i campi vengono aggiunti alla matrice "bambini" all'interno di FormBuilder con un elenco di opzioni corrispondente. Quando viene chiamata la funzione getForm, viene creato un nuovo modulo e ogni FieldType figlio viene immesso nel modulo utilizzando il metodo add(). Questo form-> add() metodo imposta automaticamente il modulo come il genitore di ogni bambino:
public function add(FormInterface $child)
{
$this->children[$child->getName()] = $child;
$child->setParent($this);
if ($this->dataMapper) {
$this->dataMapper->mapDataToForm($this->getClientData(), $child);
}
return $this;
}
senza iniziare a ignorare queste classi solo per rimuovere questo Qualcun altro sa del metodo migliore per la semplice visualizzazione del nome campi ?
È possibile estrarre semplicemente "nome" anziché "full_name" nel blocco form_div_layout.html.twig widget_attributes ma non ero sicuro se questo fosse ideale (dato che l'ID rimane invariato) o se c'era un altro metodo o opzioni iniettabili che farebbero il trucco.
Ahhh, ora, perché non ho guardato su GitHub, avrebbe avuto senso. Grazie :) – thingygeoff
@thingygeoff quindi puoi accettare questa risposta :) – j0k
Ah ah! hai aggiornato la tua risposta - una soluzione ideale! Grazie – thingygeoff