3

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

不过,我在使用表格时遇到了麻烦。我的目标似乎应该很容易。我想通过供应商类在 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 文档和内置验证工具之间看似现成的桥梁,这也意味着必须将每个单独的数据类型声明为单独的或数组来决定是否包含类的集合-based 表单或单个基于类的表单。

简而言之,我想使用 API 中可用的属性和 dataType 信息,如有必要,还可以使用像这样的资源表示来创建一个简单的函数(如我的调用函数),用于为类创建嵌套的、自我验证的表单在谷歌 API 中。我想在不创建一堆“实体”和“表单类型”的情况下实现这一点,这些“实体”和“表单类型”只是重写了库中已经编写的内容。

4

1 回答 1

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
    }
}

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

于 2012-12-20T00:53:12.227 回答