使用 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/