3

Symfony2 で作業し、ベンダー ライブラリを組み込む最適な方法を見つけようとしています。ベンダー ライブラリ メソッドの呼び出しは、ルーティング構成を使用して非常に簡単です:use適切なnamespaceを生成し、クラス名、呼び出すメソッド、およびいくつかのパス コンポーネントとクエリ変数からの引数を生成すると、ほら、すぐに統合できます。

しかし、私はフォームに問題があります。私の目標はとても簡単なはずです。Symfony2 でベンダー クラスからフォームを作成したいと考えています。具体的な例として、google-api-php-client を考えてみましょう。->createForm()ORM とバリデーションにうまく橋渡しされているため、これが最もうまく機能するように思われます。MyBundle\Form\ThingTypeただし、ファイルとクラスに依存しています。このクラスを作成するには、バンドル内にエンティティが必要です。ベンダー ライブラリの既存の「エンティティ」をそのまま使用することはできません (またはその方法を理解できませんでした)。API用語に「モデル」がすでに存在する場合にSymfony命名法で「エンティティ」を作成することは、柔軟性がなく、非常に乾燥していないようです

私が仕事をするようになったもう1つの方法は、

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

それから

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

しかし、これは、API ドキュメントと組み込みの検証ツールとの間の一見既製のブリッジを利用していません。また、クラスのコレクションを含めるかどうかを決定するために、個々のデータ型を個別または配列として宣言する必要があることも意味します。ベースのフォームまたは単一のクラスベースのフォーム。

要するに、API で利用可能なプロパティと dataType 情報を使用し、必要に応じて、このようなリソース表現を使用して、クラスのネストされた自己検証フォームを作成するための単純な関数 (呼び出し関数など) を作成したいと考えています。 Google 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 に答える