malwarebytes / form-metadata-bundle
使用表单构建器中的注释,例如 @Form\Field("text")。将元数据与实体类关联。有助于创建更通用的控制器,可以处理动态实体(如CMS场景)。
1.1.0
2014-01-02 21:04 UTC
Requires
- php: >=5.3.3
Requires (Dev)
- doctrine/annotations: 1.1.2
- symfony/symfony: ~2.3
This package is not auto-updated.
Last update: 2021-09-27 11:50:44 UTC
README
通过从其他地方定义的元数据(如实体中的注释)简化表单字段的配置。允许通过控制器以更通用的方式处理表单类型,使其能够处理动态实体/表单(如用于CMS站点)。
该项目是从FlintLabs/FormMetadataBundle分叉而来,看起来已经被遗弃。
查看表单字段注释参考
注意:人们可能希望考虑将表单配置在控制器外部作为最佳实践,使用Symfony2抽象表单。
注释示例
标准表单构建器
->add('dueDate', 'date', array('widget' => 'single_text'))
在实体中使用注释
/**
* @Form\Field("date", widget="single_text")
*/
分组示例
/**
* @Form\Field("date", widget="single_text")
* @Form\FieldGroup("example")
*/
嵌入实体示例
/**
* Refer to https://symfony.com.cn/doc/current/book/forms.html#embedded-forms
*
* You have to generate your own FormType in current implementation
*
* @Form\FormType("Acme\TaskBundle\Form\Type\CategoryType")
*/
带有一些基本表单注释的实体
use Malwarebytes\FormMetadataBundle\Configuration as Form;
use Symfony\Bundle\Validator\Constraints as Assert;
class Contact
{
/**
* @Form\Field("text")
* @Assert\NotBlank()
*/
public $name;
/**
* @Form\Field("textarea")
*/
public $message;
}
简单控制器
class MyController
{
public function contactAction()
{
$contact = new Contact();
$form = $this->get('form_metadata.mapper')->createFormBuilder($contact)->getForm();
if ($request->getMethod() == 'POST') {
$form->bindRequest($request);
if ($form->isValid()) {
// perform some action, such as saving the task to the database
return $this->redirect($this->generateUrl('task_success'));
}
}
}
}
安装
Composer安装
php composer.phar require malwarebytes/form-metadata-bundle
注册包引用
// app/AppKernel.php
public function registerBundles()
{
return array(
// ...
new Malwarebytes\FormMetadataBundle\FlintLabsFormMetadataBundle(),
// ...
);
}