この記事では、例を通して Symfony ページの基本的な作成方法を分析します。皆さんの参考に共有してください。詳細は以下の通りです
ここでは、ページを構成する構造要素であるモジュールの作成方法を学びます。同時に、アクションとテンプレートに分かれたページの作成方法も学びます。アクションとテンプレートに分かれている理由は、MVC パターンによるものです。リンクと認識は基本的なページ インタラクションであり、これらの要素をテンプレートに挿入し、アクションで処理する方法を学びます。
モジュールフレームワークを作成する
Symfony はページをモジュールに編成します。ページを作成する前に、モジュールを作成し、それを Symfony が認識できるファイル構造を持つ空のシェルに初期化する必要があります。
Symfony コマンドラインはモジュールの作成を自動化します。 init-module タスクを呼び出し、プログラム名とモジュール名をパラメータとして使用するだけです。 myapp プログラムを作成した後、このプログラムに mymodule モジュールを追加するには、次のコマンドを入力します:
>> dir+ ~/myproject/apps/myapp/modules/mymodule
>> dir+ ~/myproject/apps/myapp/modules/mymodule/actions
>> ファイル+ ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
>> dir+ ~/myproject/apps/myapp/modules/mymodule/config
>> dir+ ~/myproject/apps/myapp/modules/mymodule/lib
>> ディレクトリ+ ~/myproject/apps/myapp/modules/mymodule/templates
>> ファイル+ ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php
>> dir+ ~/myproject/apps/myapp/modules/mymodule/validate
>> ファイル+ ~/myproject/test/function/myapp/mymoduleActionsTest.php
>> トークン ~/myproject/test/function/myapp/mymoduleActionsTest.php
>> トークン ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
>> トークン ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php
actions/actions.class.php ファイルで生成されるデフォルトのアクション:
ページを追加
Symfony では、ページの背後にあるロジックはアクションに保存され、表面はテンプレートに保存されます。ロジックのないページでも空のアクションが必要です。アクションを追加します
「Hello, world!」ページには、myAction アクションを通じてアクセスします。このアクションを作成するには、以下に示すように、mymoduleActions クラスにexecuteMyAction メソッドを追加するだけです。
アクション メソッドの名前は常に、execute'Xxx'() の形式になります。名前の 2 番目の部分はアクションの名前で、最初の文字は大文字になります。
これで、次の URL をリクエストできるようになります:
http://localhost/myapp_dev.php/mymodule/myAction
Symfony は myActionSuccess.php テンプレートが欠落していると文句を言います。これは正常です。 Symfony では、通常、ページはアクションとテンプレートで構成されます。
URLは応答の一部です
Symfony には、実際のアクション名と呼び出す必要がある URL 形式を完全に分離できるルーティング システムが含まれています。これにより、カスタム URL を応答の一部であるかのようにフォーマットできます。ファイルの構造やリクエストのパラメーター データによって制限されることがなくなり、アクションの URL は解決したい方法で表示されます。たとえば、article というモジュールへのインデックス アクション呼び出しは通常次のようになります:
http://localhost/myapp_dev.php/article/index?id=123
このURLは、データから指定された記事を取得します。ただし、routingyml 構成ファイルにいくつかの小さな変更を加えることで、まったく異なる方法で URL を記述することができます:
http://localhost/articles/europe/france/finance.html
このような URL は、検索エンジンにとって使いやすいだけでなく、ユーザーにとっても非常に重要です。そのため、ユーザーは、次の例のように、クエリをカスタマイズするための疑似コード コマンドとしてアドレス バーを使用できます。
http://localhost/articles/tagged/finance+france+euro
要約すると、これは、プログラムのアクションに名前を付ける方法は、それらを呼び出す URL の外観に影響されるのではなく、プログラム内のアクションの機能によって制御されるべきであることを意味します。アクションの名前は、そのアクションが実際に何を行うかを説明しており、通常は不定詞形式の動詞 (show、list、edit など) です。アクション名はエンド ユーザーにはまったく表示されないため、明示的なアクション名を使用することを心配する必要はありません。コード コメントを効果的に使用して関数の機能を説明できるため、コードが読みやすくなります。
テンプレートを追加
アクションには、それをカプセル化するためのテンプレートが必要です。テンプレートはモジュールの templates/ ディレクトリにあるファイルで、通常はアクションとアクションの接尾辞に基づいて名前が付けられます。デフォルトのアクションのサフィックスは「success」であるため、myAction アクション用に作成されたテンプレート ファイルの名前は myActionSuccess.php にする必要があります。テンプレートにはプレゼンテーション コードのみが含まれるため、含まれる PHP コードはできるだけ少なくする必要があります。実際、「Hello, world!」を表示するページは、コードが 1 行しかないテンプレートです。
Hello, world!
テンプレート内で PHP コードを実行する必要がある場合は、以下にリストされている通常の PHP 構文の使用を避ける必要があります。代わりに、テンプレートは別の PHP 構文を使用して記述し、非 PHP プログラムでもコードを理解しやすくする必要があります。最終的なコードが正しいだけでなく、対応するコードが制御ステートメントのみにあるため、複雑な PHP コードを実行し続けるのにも役立ちます。通常の PHP 構文は次のとおりです:
Hello, world!
".time()."
";
Hello, world!
アクションにアクションのプロパティを設定して、テンプレートで使用できるようにします:
テンプレートはアクション属性に直接アクセスします:
Hello, world!
それとも、もう になってしまったのでしょうか?
テンプレートは、アクションに変数を設定しなくても、すでに一部のデータにアクセスできます。各テンプレートは通常、$sf_context、$sf_request、$sf_params、$sf_user オブジェクトのメソッドを呼び出すことができます。これらには、現在のコンテンツ、リクエスト、リクエストパラメータ、セッションに関連するデータが含まれています。すぐにその使い方を学びます。
フォームを使用してユーザーから情報を収集します
フォームはユーザーから情報を収集するための優れた方法です。 HTML でフォームやフォーム要素を記述するのは、特に XTHML を使用する場合には非常に面倒になる場合があります。以下に示すように、通常の方法で Symfony テンプレートにフォーム要素を含めることができますが、Symfony はこのタスクを簡単にするヘルパーを提供します。
テンプレートには通常の HTML コードを含めることができます:
Hello, world!
それとも、もう になってしまったのでしょうか?
Hello, world!
それとも、もう になってしまったのでしょうか?
テンプレートでヘルパーを使用する利点は、コーディングが高速化され、コードが明確かつ簡潔になることです。その代償として、学習に時間を費やす必要があります。そのため、テンプレートで Symfony ヘルパーを使用して通常の方法でコードを記述することはできませんでしたが、これは大きな損失になります。
短いオープンタグ (=、
フォーム処理には独自の章があります。これは、Symfony がフォーム処理を容易にするための多くのツール (主にヘルパー) を提供しているためです。ヘルパーについては第 10 章で詳しく学びます。
別のアクションへのリンク
アクション名と呼び出す必要がある URL の間に分離があることがわかりました。したがって、次のメソッドを使用して別のアクションへのリンクを作成すると、デフォルトのルーティング システムでのみ機能します。後で URL の外観を変更する場合は、すべてのテンプレートを調べてハイパーリンクを変更する必要があります。
ハイパーリンク、通常の方法:
そのような問題を回避するには、常に link_to() ヘルパーを使用してプログラム アクションでハイパーリンクを作成する必要があります。次の例は、ハイパーリンク ヘルパーの使用法を示しています。
link_to() ヘルパー:
Hello, world!
それとも、もう になってしまったのでしょうか?
生成された HTML は以前と同じですが、違いは、ルーティング ルールを変更すると、すべてのテンプレートが正しく機能し、URL が再フォーマットされることです。
link_to() ヘルパーは、他のヘルパーと同様に、特定のオプションおよび追加のラベル属性に対する追加の引数を受け入れます。以下の例は、オプションのパラメーターとその結果の HTML を示しています。 options パラメーターは、関連付けられた配列、または key=value を示すスペースで区切られた単純な文字列のいずれかです。
ほとんどのヘルパーはオプションのパラメータを受け取ります:
Symfony ヘルパーを使用して HTML マークアップを出力するときはいつでも、オプションのパラメーターに追加のマークアップ属性を挿入できます。 HTML 4.0 を使用してそのような属性を記述することができ、Symfony はそれをより簡潔な形式で出力します。これが、ヘルパーの方が HTML よりも記述しやすい理由です。
追加の分析と変換が必要なため、文字列構文は配列構文よりも遅くなります。
フォーム ヘルパーと同様に、リンク ヘルパーにもより多くの数とオプションがあります。
リクエストに応じて情報を取得します
ユーザーがフォーム (通常は POST リクエストの形式) を通じて情報を送信するか、URL (GET リクエスト) を通じて情報を送信するかに関係なく、sfActions オブジェクトの getRequestParameter() メソッドを使用したアクションを通じてデータを取得できます。次の例は、anotherAction の name パラメーターの値を取得する方法を示しています。
アクションのリクエストパラメータからデータを取得します:
データ処理が単純であれば、リクエストパラメータを取得するためにアクションを使用する必要さえありません。テンプレートは $sf_params という名前のオブジェクトにアクセスできます。このオブジェクトは、アクションの getRequestParameter() メソッドと同様に、リクエスト パラメーターを取得する get() メソッドを提供します。
executeAnotherAction() メソッドが空の場合、次の例は、anotherActionSuccess.php テンプレート ファイルが同じ名前のパラメーターを取得する方法を示しています。
テンプレートのリクエストパラメータから直接データを取得します:
こんにちは、get('name') ?>!
それでは、$_POST、$_GET、または $_REQUEST 変数を使用しないのはなぜでしょうか? URL の形式が異なるため (http://localhost/articles/europe/france/finance.html)、通常の PHP 変数が再び機能し、ルーティング システムのみがリクエスト パラメーターを取得します。また、悪意のあるコードの挿入を防ぐために入力フィルタリングを追加したいと考えています。これは、すべてのリクエスト パラメータを簡潔なパラメータ アセンブラに保存する場合にのみ可能です。
$sf_params オブジェクトは、単に配列と同等のメソッドを提供するよりもはるかに強力です。たとえば、リクエスト パラメータが存在するかどうかだけを確認したい場合は、get() を使用する代わりに $sf_params->has() メソッドを使用して実際の値をテストすることができます。
テンプレート内のリクエストパラメータの存在をテストします:
こんにちは、get('name') ?>!
こんにちは、ジョン ドゥ!
すでに推測していますが、これは 1 行のコードで記述できます。 Symfony のほとんどの get メソッドと同様、アクションの getRequestParameter() メソッドとテンプレートの $sf_params->get() メソッド (実際には同じオブジェクトの同じメインメソッドを呼び出します) は 2 番目のパラメータを受け入れます。リクエストパラメータを指定し、デフォルト値を使用します:
こんにちは、get('name', 'John Doe') ?>! p>
概要
Symfony では、ページはアクション (actions/actions.class.php ファイル内のexecuteというプレフィックスが付いたメソッド) とテンプレート (templates/ ディレクトリ内のファイル、通常は Success.php で終わる) で構成されます。これらは通常、プログラム内の関数としてモジュールに編成されます。テンプレートの作成はヘルパーによって行われます。ヘルパーは、HTML コードを返す Symfony によって提供される関数です。 URL を応答の一部として扱う必要があり、URL をフォーマットする必要があるため、アクションの名前付けで URL への直接参照やリクエスト パラメーターの取得を使用することは避けるべきです。
これらの基本原則を理解したら、Symfony を使用して完全な Web プログラムを作成できます。しかし、プログラム開発中に処理する必要があるタスクはすべて Symfony の機能によって完了するため、まだまだ長い道のりがあります。
この記事で説明した内容が皆さんの symfony フレームワーク プログラミングに役立つことを願っています。