13

コントローラの外部でgenerateUrl()メソッドを使用する可能性はありますか?

を使用してカスタムリポジトリクラスで使用しようとしました$this->get('router')が、機能しませんでした。

アップデート

私はここで一時的な解決策を見つけました:

http://www.phamviet.net/2012/12/09/symfony-2-inject-service-as-dependency-in-to-repository/

「推奨されていません」が、サービスコンテナ全体をリポジトリに注入しました。

しかし、今のところは機能します。

update2

コンテナ全体の代わりにルーターを注入することはおそらくより良い考えです:)

4

4 に答える 4

17

のソースコードをController::generateUrl()見ると、それがどのように行われているかがわかります。

$this->container->get('router')->generate($route, $parameters, $referenceType);

基本的には、ルートの名前を入力するだけです($routeここ)。存在する場合、いくつかのパラメーター($parameters)と参照のタイプ(の定数の1つUrlGeneratorInterface

于 2013-03-17T08:00:59.737 に答える
11

コンテナをリポジトリに注入しないでください...本当に、しないでください!

もし私があなたなら、私はサービスを作成し、それにルーターを注入します。このサービスでは、リポジトリを使用し、ルーターを使用して必要なコードを追加するメソッドを作成します。

これは、他の開発者にとって、汚れが少なく、使いやすく、理解しやすい方法です。

于 2013-03-17T15:46:30.780 に答える
2

ルーター自体をEntityRepsitoryに挿入し(Development Lifeブログの投稿Symfony2:Injecting service asdependent to doctrine repositoryに記載されているように)、次を使用できます。$this->router->generate('acme_route');

于 2013-03-18T11:22:01.160 に答える
0

symfony4とSyliusでFormTypeが(例)AbstractResourceTypeを拡張する場合

class PostType extends AbstractResourceType
{

    private $router;
    public function __construct(RouterInterface $router, $dataClass, $validationGroups = [])
    {
        $this->router = $router;
        parent::__construct($dataClass, $validationGroups);

    }
}

Services.yaml:

app.post.form.type:
        class: App\Form\Admin\Post\PostType
        tags:
            - { name: form.type }
        arguments: ['@router.default', '%app.model.post.class%' ]
于 2021-05-31T08:52:49.243 に答える