私はいつも、リンクを作成するためのこれらの組み込みのSymfony関数を忘れがちです。
4 に答える
アプリケーション全体でユーザーフレンドリーなURLを使用することが目標である場合は、次のアプローチを使用してください。
1)アプリケーションのrouting.ymlファイルにモジュール/アクションのルーティングルールを作成します。次の例は、アプリケーションの最新の質問を表示するアクションのルーティングルールであり、デフォルトでページ1(ポケットベルを使用)になっています。
recent_questions:
url: questions/recent/:page
param: { module: questions, action: recent, page: 1 }
2)ルーティングルールを設定url_for()
したら、テンプレートのヘルパーを使用して送信URLをフォーマットします。
<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a>
この例では、次のURLが作成されますhttp://myapp/questions/recent/1.html
。
3)着信URL(リクエスト)はルーティングシステムによって分析され、ルーティングルール構成でパターン一致が見つかった場合、名前付きワイルドカード(つまり:/page
、URLの一部)がリクエストパラメーターになります。
link_to()
ヘルパーを使用して、HTML<a>
タグを使用せずにURLを出力することもできます。
このアドバイスは symfony 1.0 向けです。おそらくそれ以降のバージョンで動作します。
sfAction クラス内で:
文字列 genUrl($parameters = array(), $absolute = false)
例えば。$this->getController()->genUrl('yourmodule/youraction?key=value&key2=value', true);
テンプレート内:
これにより、通常のリンクが生成されます。
string link_to($name, $internal_uri, $options = array());
例えば。link_to('私のリンク名', 'yourmodule/youraction?key=value&key2=value');
さらに、そのURLを含むクエリ文字列が実際に必要な場合は、次を使用します。
link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));
そうしないと、URLの一部としてルーティングしようとし、アクションが中断する可能性があります。
最初にルールを定義せずに URL を直接生成できます。
アクションで URL を生成したい場合は、generateUrl()ヘルパーを使用できます。
$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))
テンプレートで URL を生成する場合は、 url_for()ヘルパーを使用できます。
url_for('[ModuleName]/[ActionName]', $absolute)
$absolute を true/false に設定します。表示したい場合は echo を忘れずに使用してください。
しかし、リンク(のようなもの)を作成したい場合は<a href=""></a>
、link_to()ヘルパーが行います。