symfony中文手册|symfony框架使用自定义类的例子

时间:2019-10-29  来源:Symfony  阅读:


之前,我们创建form在控制器中,很简单。但是,它使我们的控制器很难看,如果我们想把form用到别的地方,估计还要重新写代码。


由于存在这些原因,这些代码需要创建到一个自己的form表单类中。现在,创建一个新的Form目录并创建一个新文件RegisterFormType。创建类,给它一个命名空间并继承AbstractType。

// src/Yoda/UserBundle/Form/RegisterFormType.php
namespace Yoda\UserBundle\Form;
 
use Symfony\Component\Form\AbstractType;
 
class RegisterFormType extends AbstractType
{
}

我们需要在这个类中添加一些方法。首先,是最不重要的getName()。添加这个的目的,就是返回一个独一无二的表单字符串。他在你渲染form时使用这部分名称属性。

// src/Yoda/UserBundle/Form/RegisterFormType.php
// ...
 
public function getName()
{
    return "user_register";
}

真正重要的方法是buildForm()。我使用我的IDE创建这个方法,如果你是手动创建的不要忘了声明FormBuilderInterface。

用这个buildForm方法来创建我们的form!把之前controller的form代码拷贝到这里:


// src/Yoda/UserBundle/Form/RegisterFormType.php
 
use Symfony\Component\Form\FormBuilderInterface;
// ...
 
public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add("username", "text")
        ->add("email", "email")
        ->add("plainPassword", "repeated", array(
            "type" => "password"
        )
    );
}

完成,创建一个setDefaultOptions函数并设置data_class选项:


// src/Yoda/UserBundle/Form/RegisterFormType.php
 
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
// ...
 
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
    $resolver->setDefaults(array(
        "data_class" => "Yoda\UserBundle\Entity\User",
    ));
}
 

使用Form类

在控制器中移除builder代码。换成CreateForm并传入RegisterFormType的实例。


// src/Yoda/UserBundle/Controller/RegisterController.php
 
use Yoda\UserBundle\Form\RegisterFormType;
// ...
 
public function registerAction(Request $request)
{
    $defaultUser = new User();
    $defaultUser->setUsername("Foo");
 
    $form = $this->createForm(new RegisterFormType(), $defaultUser);
 
    // ...
}
刷新!我们现在已经征服了form!

 

这些表单
快速预览。创建一个form,给它设置字段和字段类型。首先,form会返回一个关联数组,我们改变data_class配置返回一个实体对象。这些表单还可以单独在外部创建,并在controller里使用。

symfony中文手册|symfony框架使用自定义类的例子

http://m.bbyears.com/jiaocheng/76042.html

推荐访问:symfony2 symfony路由和界面 symfony2中文手册 symfony4 symfony3
相关阅读 猜你喜欢
本类排行 本类最新