Symfony ページの基本的な作成例の詳細説明、symfony サンプルの詳細説明_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:09:01
オリジナル
841 人が閲覧しました

Symfonyページの基本的な作成例の詳細な説明、symfonyサンプルの詳細な説明

この記事では、例を通して Symfony ページの基本的な作成方法を分析します。皆さんの参考に共有してください。詳細は以下の通りです

ここでは、ページを構成する構造要素であるモジュールの作成方法を学びます。同時に、アクションとテンプレートに分かれたページの作成方法も学びます。アクションとテンプレートに分かれている理由は、MVC パターンによるものです。リンクと認識は基本的なページ インタラクションであり、これらの要素をテンプレートに挿入し、アクションで処理する方法を学びます。

モジュールフレームワークを作成する

Symfony はページをモジュールに編成します。ページを作成する前に、モジュールを作成し、それを Symfony が認識できるファイル構造を持つ空のシェルに初期化する必要があります。

Symfony コマンドラインはモジュールの作成を自動化します。 init-module タスクを呼び出し、プログラム名とモジュール名をパラメータとして使用するだけです。 myapp プログラムを作成した後、このプログラムに mymodule モジュールを追加するには、次のコマンドを入力します:

コードをコピーします コードは次のとおりです:
> cd ~/myproject
> 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/,config/,lib/,templates/,validate/ ディレクトリとは別に、このコマンドは 3 つのファイルのみを作成します。 test/ ディレクトリにあるのは単体テストです。 events.class.php は、デフォルトのモジュールのウェルカム ページを指します。 templates/indexSuccess.php ファイルは空です。

actions/actions.class.php ファイルで生成されるデフォルトのアクション:


コードをコピーします コードは次のとおりです:
クラス mymoduleActions は sfActions を拡張します
{
パブリック関数executeIndex()
{
$this->forward('default', 'module');
}
}
?>
新しいモジュールごとに、Symfony はデフォルトのインデックスアクションを作成します。これは、executeIndex という名前のアクション メソッドと、indexSuccess.php という名前のテンプレート ファイルで構成されます。次の URL から対応するページを参照できます:
http://localhost/myapp_dev.php/mymodule/index
ここではデフォルトのインデックスアクションを使用していないため、actions.class.php ファイルからexecuteIndex() メソッドを削除し、templates/ ディレクトリからindexSuccess.php ファイルを削除できます。

コマンドラインに加えて、Symfony はモジュールを初期化するための他のメソッドも提供します。 1 つの方法は、ディレクトリとファイルを手動で作成することです。多くの場合、モジュールのアクションとテンプレートは、特定のデータ テーブルのデータを操作することを目的としています。データテーブルからデータレコードを作成、取得、更新、削除するために必要なコードは通常同じであるため、Symfony はこのコードを生成するためのフレームワークと呼ばれるメカニズムを提供します。続きはまた後ほどご紹介させていただきます。

ページを追加

Symfony では、ページの背後にあるロジックはアクションに保存され、表面はテンプレートに保存されます。ロジックのないページでも空のアクションが必要です。

アクションを追加します

「Hello, world!」ページには、myAction アクションを通じてアクセスします。このアクションを作成するには、以下に示すように、mymoduleActions クラスにexecuteMyAction メソッドを追加するだけです。


コードをコピーします コードは次のとおりです:
クラス mymoduleActions は sfActions を拡張します
{
パブリック関数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

Symfony はユーザーのために URL を解析して生成する方法を知っています。ルーティング システムは、要求されたパラメータをコンパクトな URL から自動的に削除し、アクションで使用できるようにします。また、応答に含まれるハイパーリンクを整形して、見た目をすっきりさせます。この機能については、第 9 章で詳しく説明します。

要約すると、これは、プログラムのアクションに名前を付ける方法は、それらを呼び出す URL の外観に影響されるのではなく、プログラム内のアクションの機能によって制御されるべきであることを意味します。アクションの名前は、そのアクションが実際に何を行うかを説明しており、通常は不定詞形式の動詞 (show、list、edit など) です。アクション名はエンド ユーザーにはまったく表示されないため、明示的なアクション名を使用することを心配する必要はありません。コード コメントを効果的に使用して関数の機能を説明できるため、コードが読みやすくなります。

テンプレートを追加

アクションには、それをカプセル化するためのテンプレートが必要です。テンプレートはモジュールの templates/ ディレクトリにあるファイルで、通常はアクションとアクションの接尾辞に基づいて名前が付けられます。デフォルトのアクションのサフィックスは「success」であるため、myAction アクション用に作成されたテンプレート ファイルの名前は myActionSuccess.php にする必要があります。

テンプレートにはプレゼンテーション コードのみが含まれるため、含まれる PHP コードはできるだけ少なくする必要があります。実際、「Hello, world!」を表示するページは、コードが 1 行しかないテンプレートです。


コードをコピーします コードは次のとおりです:

Hello, world!

テンプレート内で PHP コードを実行する必要がある場合は、以下にリストされている通常の PHP 構文の使用を避ける必要があります。代わりに、テンプレートは別の PHP 構文を使用して記述し、非 PHP プログラムでもコードを理解しやすくする必要があります。最終的なコードが正しいだけでなく、対応するコードが制御ステートメントのみにあるため、複雑な PHP コードを実行し続けるのにも役立ちます。

通常の PHP 構文は次のとおりです:


コードをコピーします コードは次のとおりです:

Hello, world!


if ($test)
{
echo "

".time()."

";
}

?>
代替の PHP 構文は次のとおりです:


コードをコピーします コードは次のとおりです:

Hello, world!






アクションからテンプレートに情報を転送 アクションの仕事は、すべての複雑な計算、データの読み取りとテストを完了し、出力またはテストされるテンプレート変数を設定することです。 Symfony は、アクション クラスのプロパティをグローバル名前空間のテンプレートで利用できるようにします。以下に、情報がアクションからテンプレートにどのように渡されるかを示します。

アクションにアクションのプロパティを設定して、テンプレートで使用できるようにします:


コードをコピーします コードは次のとおりです:

クラス mymoduleActions は sfActions を拡張します
{
パブリック関数executeMyAction()
{
$today = getdate();
$this->hour = $today['hours'];
}
}

テンプレートはアクション属性に直接アクセスします:

コードをコピーします コードは次のとおりです:

Hello, world!


= 18): ?>

それとも、もう になってしまったのでしょうか?


テンプレートは、アクションに変数を設定しなくても、すでに一部のデータにアクセスできます。各テンプレートは通常、$sf_context、$sf_request、$sf_params、$sf_user オブジェクトのメソッドを呼び出すことができます。これらには、現在のコンテンツ、リクエスト、リクエストパラメータ、セッションに関連するデータが含まれています。すぐにその使い方を学びます。

フォームを使用してユーザーから情報を収集します

フォームはユーザーから情報を収集するための優れた方法です。 HTML でフォームやフォーム要素を記述するのは、特に XTHML を使用する場合には非常に面倒になる場合があります。以下に示すように、通常の方法で Symfony テンプレートにフォーム要素を含めることができますが、Symfony はこのタスクを簡単にするヘルパーを提供します。

テンプレートには通常の HTML コードを含めることができます:

コードをコピーします コードは次のとおりです:

Hello, world!


= 18): ?>

それとも、もう になってしまったのでしょうか?







ヘルパーは、テンプレートで使用される Symfony によって定義された PHP 関数です。実際の HTML コードを自分で記述するよりもはるかに高速に HTML コードを出力します。 Symfony ヘルパーを使用すると、次のコードで上記の通常の HTML コードと同じ出力が得られます。


コードをコピーします コードは次のとおりです:

Hello, world!

= 18): ?>

それとも、もう になってしまったのでしょうか?









上記のコードで、ヘルパー バージョンを使用する方が HTML コードを作成するより速くないと思われる場合は、次の状況を考慮できます:


コードをコピーします コードは次のとおりです: $card_list = 配列(
「ビザ」 => 「ビザ」、
「MAST」 => 「マスターカード」、
「アメックス」 => 「アメリカン・エキスプレス」、
'ディスク' => '発見');
echo select_tag('cc_type', options_for_select($card_list, 'AMEX'));
?>

これにより、次の HTML 出力が生成されます:


コードをコピーします コードは次のとおりです: