3

FOSUserBundle プロファイル コントローラー

 use Symfony\Component\DependencyInjection\ContainerAware;
 class ProfileController extends ContainerAware

一部の機能は問題ありません...しかし、試してみるとフォームが作成されます

$form = $this->createForm

このエラーが表示されます: Call to undefined method ProfileController::createForm()

しかし、これを次のように変更すると:

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class ProfileController extends Controller

フォームがレンダリングされます...だから...このコントローラーをクラスに追加して、ContainerAwareを削除しない方法がわかりませんか? :/

///

私の解決策は?

コンテナ対応の代わりに私が使用する

use Symfony\Component\DependencyInjection\ContainerAwareInterface;

その後

class ProfileController extends Controller implements ContainerAwareInterface

しかし、私は別のものを見ることができないことを知りません。

4

3 に答える 3

6

元の質問に答えるには、

交換:

$form = $this->createForm

と:

$form = $this->container->get('form.factory')->create($type, $data, $options);

createFormメソッドは、Symfony \ Bundle \ FrameworkBundle \ Controller\Controllerで定義されている便利なメソッドです。さまざまな理由から、サードパーティのライブラリはControllerクラスを拡張しない傾向があります。したがって、createFormは使用できません。

本当の問題は、なぜプロファイルコントローラーを拡張しようとしているのかということです。ほとんどの場合、それは必要ありません。イベントを聞いてカスタマイズすることをお勧めします。もちろん、FOSUserBundleの開発バージョンを使用していることを前提としています。

于 2013-03-14T14:13:20.330 に答える
2

コントローラはすでにContainerAware- コントローラ宣言から:

class Controller extends ContainerAware
于 2013-03-14T11:12:08.637 に答える
2

Richard Miller によるこのブログSymfony2: Moving Away From the Base Controllerをご覧ください。

于 2013-07-02T11:50:10.313 に答える