使用Symfony2并尝试找出如何最好地合并供应商库。使用路由配置调用供应商库方法非常简单:use
相应的namespace
,生成类名,要调用的方法以及来自几个路径组件和查询变量的参数,瞧,即时集成。
->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”的情况下完成此操作,这些实体只是重写已经在库中编写的内容。
答案 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
}
}
如果要添加任何自己的实体项,则可以在此处执行此操作,但仍保留基本实体/模型中的方法和属性。