属性 "password" 和 twig/symfony 中都不存在任何一种方法
Neither the property "password" nor one of the methods exists in twig/symfony
我想通过在 AddUserType.php
的可选值中将 show_password_field
设为 true 来重用表单字段。我的编辑表单字段不应包含密码字段。所以我用了这个
if ($options['show_password_field']) {
$builder->add('password','password',array('required'=>true));
}
在表单类型中。有人能弄清楚吗? twig 文件的第 37 行有什么问题。
Neither the property "password" nor one of the methods "password()",
"getpassword()"/"ispassword()" or "__call()" exist and have public
access in class "Symfony\Component\Form\FormView" in
SokosimuEditorBundle:User:addUser.html.twig at line 37.
AddUserType.php
namespace Sokosimu\EditorBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class AddUserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('alias','text',array('required'=>false));
$builder->add('email', 'email',array('required'=>false));
if ($options['show_password_field']) {
$builder->add('password','password',array('required'=>true));
}
$builder->add('mobile','text',array('required'=>false));
$builder->add('submit', 'submit');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Sokosimu\UserBundle\Entity\User',
'show_password_field' => true
));
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'adduser';
}
}
以及 addUser.html.twig 中的第 37 行
<div class="form-group">
<label for="password">Password:</label>
{{ form_widget(form.password,{'attr':{'class':'form-row'}}) }}
{{ form_errors(form.password) }}
</div>
呈现编辑的控制器
public function editEditorUserAction(User $user,Request $request){
$form = $this->createForm(new AddUserType(),$user,array(
'show_password_field' => false));
$form->handleRequest($request);
if($form ->isValid() && $form->isSubmitted()){
$em = $this->get('doctrine')->getManager();
$editUser = $user ->getEditoruser();
$em->persist($editUser);
$em->flush();
return $this->redirect($this->generateUrl('sokosimu_editor_userlist'));
}
return $this->render('SokosimuEditorBundle:User:addUser.html.twig', array(
'form' => $form->createView(),
'user' => $user->getId()
));
}
您必须检查 form.password 是否存在。
{% if form.password is defined %}
<div class="form-group">
<label for="password">Password:</label>
{{ form_widget(form.password,{'attr':{'class':'form-row'}}) }}
{{ form_errors(form.password) }}
</div>
{% endif %}
我想通过在 AddUserType.php
的可选值中将 show_password_field
设为 true 来重用表单字段。我的编辑表单字段不应包含密码字段。所以我用了这个
if ($options['show_password_field']) {
$builder->add('password','password',array('required'=>true));
}
在表单类型中。有人能弄清楚吗? twig 文件的第 37 行有什么问题。
Neither the property "password" nor one of the methods "password()", "getpassword()"/"ispassword()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView" in SokosimuEditorBundle:User:addUser.html.twig at line 37.
AddUserType.php
namespace Sokosimu\EditorBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class AddUserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('alias','text',array('required'=>false));
$builder->add('email', 'email',array('required'=>false));
if ($options['show_password_field']) {
$builder->add('password','password',array('required'=>true));
}
$builder->add('mobile','text',array('required'=>false));
$builder->add('submit', 'submit');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Sokosimu\UserBundle\Entity\User',
'show_password_field' => true
));
}
/**
* Returns the name of this type.
*
* @return string The name of this type
*/
public function getName()
{
return 'adduser';
}
}
以及 addUser.html.twig 中的第 37 行
<div class="form-group">
<label for="password">Password:</label>
{{ form_widget(form.password,{'attr':{'class':'form-row'}}) }}
{{ form_errors(form.password) }}
</div>
呈现编辑的控制器
public function editEditorUserAction(User $user,Request $request){
$form = $this->createForm(new AddUserType(),$user,array(
'show_password_field' => false));
$form->handleRequest($request);
if($form ->isValid() && $form->isSubmitted()){
$em = $this->get('doctrine')->getManager();
$editUser = $user ->getEditoruser();
$em->persist($editUser);
$em->flush();
return $this->redirect($this->generateUrl('sokosimu_editor_userlist'));
}
return $this->render('SokosimuEditorBundle:User:addUser.html.twig', array(
'form' => $form->createView(),
'user' => $user->getId()
));
}
您必须检查 form.password 是否存在。
{% if form.password is defined %}
<div class="form-group">
<label for="password">Password:</label>
{{ form_widget(form.password,{'attr':{'class':'form-row'}}) }}
{{ form_errors(form.password) }}
</div>
{% endif %}