从供应商类生成Symfony2表单

时间:2012-12-20 00:49:20

标签: php symfony doctrine symfony-forms

使用Symfony2并尝试找出如何最好地合并供应商库。使用路由配置调用供应商库方法非常简单:use相应的namespace,生成类名,要调用的方法以及来自几个路径组件和查询变量的参数,瞧,即时集成。

但是,我遇到了表格问题。我的目标似乎应该很容易。我想从供应商类在Symfony2中创建表单。作为一个具体示例,请考虑google-api-php-client。好像->createForm()似乎最有效,因为它可以很好地连接到ORM和验证。但是,它依赖于MyBundle\Form\ThingType文件和类。要创建这个类,我需要在我的bundle中有一个实体。我不能(或者无法弄清楚如何)只使用供应商库中的现有“实体”。当API语言中已经存在“模型”时,在Symfony命名法中创建“实体”似乎是不灵活的,非常非D.R.Y。

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

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

然后

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

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

简而言之,我想使用API​​中提供的属性和dataType信息,并在必要时the Resource representations like this one创建一个简单的函数(如我的调用函数),用于创建嵌套的,自我验证的表单Google API中的类。我希望在不创建一堆“实体”和“FormTypes”的情况下完成此操作,这些实体只是重写已经在库中编写的内容。

1 个答案:

答案 0 :(得分:1)

供应商库是否没有任何安装细节?您通常应该使用服务调用(如$this->get('vendor.name.form_object'))从控制器调用供应商的东西,而不是在服务中调用类将包含任何所需的依赖项。

您在捆绑中创建的实体也只是扩展其预制抽象类的基本实体。例如(取自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
    }
}

如果要添加任何自己的实体项,则可以在此处执行此操作,但仍保留基本实体/模型中的方法和属性。