2016-12-07 2 views
1

何回も私はsymfonyにおいて、たとえば、以下を参照してください。ルーティングジェネラルメソッドをビューに配線することはできますか?

htmlファイル:

<hr> 
<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?> 
<br> 

これは悪臭を、depencency注入を使用しないように:このようにHTMLは、現在のフレームワークに接続されています。別のフレームワークに移動したいのであれば、編集する必要があります。 コントローラから生成されたURL文字列を渡す方が良いでしょうか?

+5

この質問に対する回答はありません。論理とビューの制限を決めるのはあなた次第です。 –

+1

悪臭はありますか? reactjs-developersに伝えてください;) – Timurib

+1

私は同意します。 urlは、ビューではなくコントローラで生成される必要があります。このビューは、ロジック用ではない出力用です。関心事の分離。 –

答えて

0

モデルをビューから分離するために、コントローラにURLを生成することができます。しかしそれは最初の一歩です。モデル、ビュー、およびルーティングを分離することが最善の方法です。最善の方法は、パスを生成するビューヘルパーを使うことです。プロジェクトのフレームワーク(symfonyへの放棄)を変更しました。プロジェクトでテンプレート(SmartyやTwigなど)を使用したときは簡単です

Symfony Twigの拡張機能を使って、パスの生成とコントローラを分ける例があります。

例として、Twigはパスメソッドを使用します。 This view helperは、経路パラメタからURLパスを検索しています。コントローラーやモデルとは関係がありません。

パス:指定された ルートの相対URL(スキームとホストなし)を返します。 relativeを有効にすると、 の現在のパスに関連するパスが作成されます。

あなたが見ることができるように、ルート名に注意する必要があります。

/**YourController**/ 
/** 
* @Route("/foo", name="new-game", methods="get") 
* 
* @return Response 
*/ 
public function myFooAction() 
{ 
    //Your code 

    //The rendering without information about his own or other path 
    return $this->render('default/foo.html.twig', []); 
} 

そして小枝で対応するパス:あなたが好きなあなたのバックエンドからビューを分離することができ

<hr> 
<a href="{{ path('foo') }}" title="Alt">Some text</a> 
<br> 
1

が、あなたのフロントエンドのファイルがあっても、ある時点でのURLを参照していること単なるapiです。

あなたのURLを<?php $this->generateUrl('blog_show', array('slug' => 'slug-value')); ?>から<?php $showUrl; ?>に変更すると、メンテナンスが難しくなり、別のフレームワークに移行するのが難しくなります。

Framework Independentにしたい場合は、symfonyバックエンドをAPIのように使用する必要があります。

関連する問題