php - 从供应商类生成 Symfony2 表单

标签 php symfony doctrine symfony-forms

使用 Symfony2 并尝试弄清楚如何最好地合并 Vendor 库。使用路由配置调用供应商库方法非常容易:使用适当的命名空间,生成类名、要调用的方法以及一对路径组件的参数和查询变量,瞧,即时集成。

不过,我在处理表格时遇到了问题。我的目标看起来应该很容易。我想从供应商类在 Symfony2 中制作表格。作为一个具体的例子,考虑 google-api-php-client .看起来 ->createForm() 效果最好,因为它很好地连接了 ORM 和验证。但是,它依赖于 MyBundle\Form\ThingType 文件和类。要创建此类,我的包中需要一个实体。我不能(或无法弄清楚如何)只使用供应商库中的现有“实体”。当 API 术语中已经存在“模型”时,在 Symfony 命名法中创建“实体”似乎是不灵活的,而且非常不合时宜。

我开始工作的另一种方法是使用

$formBuilder = $this->createFormBuilder(new GoogleApi\Contrib\Event);

然后

foreach(get_object_vars($event) as $prop) { $formBuilder->add($prop); }

但这并没有利用 API 文档和内置验证工具之间看似现成的桥梁,这也意味着每个单独的数据类型都必须声明为单独的或数组,以决定是否包含一个基于类的表单的集合或单个基于类的表单。

简而言之,我想使用 API 中可用的属性和数据类型信息,并且,如果需要,the Resource representations like this one创建一个简单的函数(比如我的调用函数)来为 Google API 中的类创建嵌套的、 self 验证的表单。我想在不创建一堆“实体”和“表单类型”的情况下完成此操作,这些“实体”和“表单类型”只是重写库中已经编写的内容。

最佳答案

供应商库没有任何安装细节吗?您通常应该使用 $this->get('vendor.name.form_object') 之类的服务调用从 Controller 调用供应商事物,而不是在服务中调用类,这将包括任何所需的依赖项。

此外,您将在包中创建的实体将只是扩展其预制抽象类的基本实体。例如(取自 https://github.com/FriendsOfSymfony/FOSUserBundle )

<?php
// src/Acme/UserBundle/Entity/User.php

namespace Acme\UserBundle\Entity;

use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }
}

如果您想添加任何您自己的实体项目,那么您可以在此处执行此操作,但仍然保留基础实体/模型的方法和属性。

关于php - 从供应商类生成 Symfony2 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13963674/

相关文章:

Mysql ( Doctrine ) - 计算计数 > X 的内连接

php - 按月分组并在 Laravel Eloquent 上对日期进行排序

php - 自定义错误页面无法直接访问

symfony - 如何更改 Symfony 的控制台脚本名称

php - Doctrine 插入很多数据

php - Doctrine_Pager 返回带有多个 groupBy 列的错误结果

mysql - Doctrine/Symfony 更改单个列的字符集

php - 防止 PHP date() 默认为 12/31/1969

PHP DOMElement 是不可变的。 = 'No Modification Allowed Error'

regex - Symfony2.0 使用正则表达式验证