ステップ6:コントローラーを作成する

5.2版本
维护 不明意
5.0

コントローラーを作物成

�ましょう。

ホームページへ(http:// localhost:8000 /)のような,httpリクエストが来と,sym欧宝娱乐app下载地址fonyはリクエストされたパス(ここでは/)にマッチするルートを探そうとします。ルートは,リクエストのパスと対応するHTTPレスポンスを作成する関数のPHPの実行可コードをリンクします。

これらの実行可能なコードを”コントローラー”と呼びます。欧宝娱乐app下载地址Symfonyでは,ほとんどのコントローラーはPHPのクラスで実装します。クラスは手動で作成することが可能ですが,もっと早くするためS欧宝娱乐app下载地址ymfonyがやってくれることを見てみましょう。

Maker Bundleでで楽を

少ない努力でコントローラーを生成するのに欧宝娱乐app下载地址symfony / maker-bundleパッケージを使用することができます:

1
$ 欧宝娱乐app下载地址symfony composer req maker -dev

Maker Bundleは开开时のみで利なバンドルで,本番では有色にしたくのでので——开发フラグをつけるのを忘れないでください。

Maker Bundleははたくさんのクラス生成してくれます。この书签では,常に使うことになります。各“ジェネレーター”は,コマンドに定义さており,全てのコマンドは,制作コマンドのネームスペースにますます。

欧宝娱乐app下载地址Symfony控制台の列表コマンドは,指定指定のネームスペーススペースのの全てのコマンド覧覧表示ししMAKER BUNDLESで实用可根据すべてのジェネレーターを调べてみください

1
$ 欧宝娱乐app下载地址symfony控制台列表制作

设定のフォーマットを选ぶ

プロジェクトの最初のコントローラーを作成する前に,使用したい設定のフォーマットを決める必要があります。欧宝娱乐app下载地址SymfonyはYAML、XML、PHPアノテーションを最初からサポートしています。

関連するパッケージの設定では,YAMLがベストな選択です。YAMLフォーマットは,配置/ディレクトリ内で使用されています。多くの場合,新しいパッケージをインストールすると,パッケージのレシピは.yamlという拡張子の新規ファイルをこのディレクトリに追加します。

PHPコードに関連する設定では,コードに隣接して定義することができるアノテーションがベターな選択です。例で説明しましょう。リクエストが来ると,設定はS欧宝娱乐app下载地址ymfonyにどのリクエストパスがどのコントローラー(PHPクラス)によって処理するか伝える必要があります。YAMLやXMLやPHPフォーマットでは,2つのファイルを必要とします(設定ファイルとPHPのコントローラーファイル)。アノテーションを使用すれば,設定はコントローラークラスで直接設定可能です。

アノテーションアノテーションを使するために,依存を追加する必要あり

1
$ 欧宝娱乐app下载地址Symfony Composer REQ注释

インストールする必要のあるパッケージ名をどうやって判断するか疑問に思ったかもしれません。ほとんどの場合,知る必要はありません。欧宝娱乐app下载地址Symfonyはエラーメッセージ中にインストールが必要なパッケージを表示しています。注释パッケージのない状態で欧宝娱乐app下载地址制作:控制器コマンドを実行,正式パッケージパッケージをインストールするヒント含んだだををことができことができことができことができことができことができ

コントローラーを生成する

制作:控制器コマンドで最初のコントローラーを作成しましょう:

1
$ 欧宝娱乐app下载地址symfony控制台:控制器ConferenceController

このコマンドはSRC / Controller.ディレクトリ以下にConferenceController.クラスを作成します。生成されたクラスはちゃんと動くようなボイラープレートが既に入っています:

src /控制器/ ConferenceController.php
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
命名空间App \控制器;欧宝娱乐app下载地址Symfony \包\ FrameworkBundle \ \ AbstractController控制器;欧宝娱乐app下载地址Symfony \ HttpFoundation \ \组件响应;欧宝娱乐app下载地址Symfony组件\ \路由\注释\路线;ConferenceController.扩展AbstractController.{#(路线(“/会议”,名字:“会议”))上市功能指数():回复{返回这个美元- >使成为(“会议/ index.html.twig”,(“controller_name”=>'ConferenceController',]);}}

#(路线(“/会议”,名称:“会议”)アノテーションが,ConferenceController.index ()メソッドをコントローラにしています(設定は,コードに隣接しています)。

/会议をブラウザで開くと,このコントローラが実行され,レスポンスが返されます。

ホームページにマッチするようにルートを微調整します:

patch_file
1 2 3 4 5 6 7 8 9 10 11
--- a / src / controller / conferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -8,7 +8,7 @@ use 欧宝娱乐app下载地址Symfony\Component\Routing\Annotation\Route;类ConferenceController扩展了AbstractController {- #[Route('/conference', name: 'conference')]+ #[Route('/', name: 'homepage')]public function index(): Response {return $this->render('conference/index.html. php ');嫩枝”,(

コード内でホームページを参照したいときは,ルートの名字が便利です。/パスパスをハードコードせず,ルート名を使いましょ。

デフォルトで表示されるページの代わりに,シンプルなHTMLのページを返すようにしましょう:

patch_file
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18 19
--- a / src / controller / conferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -11,8 +11,13 @@类ConferenceController扩展了AbstractController#[路由('/',名称:'主页')]公共函数索引():响应{-返回$ this - >渲染(会议/ index . html。嫩枝”,(- 'controller_name'=>'conferenceController',-]);+返回新的响应(<<+ 身体+ < >+ 身体+ < / >+ < / html >+ EOF+);}}

ブラウザを更新します:

コントローラーの主な責務は,リクエストに対応するHTTPレスポンスを返すことです。

イースターエッグを追加します

どうやってリクエストの情報からレスポンスが作られるかを見るために,小さな复活节彩蛋を追加してみううホームページに你好=法比安

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 18 19 20 21 21 22 23 25 22 26 22
--- a / src / controller / conferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -3,6 +3,7 @@命名空间app \ controller;使用sy欧宝娱乐app下载地址mfony \ bundle \ frameworkbundle \ controller \ AbstractController;+使用Sy欧宝娱乐app下载地址mfony \ HttpFoundation \ \组件请求;组件使用欧宝娱乐app下载地址Symfony \ \ HttpFoundation \反应;使用Sy欧宝娱乐app下载地址mfony \组件\路由\注释\路线;@@ -11,11 +12,17 @@ class conferenceController扩展了抽象的控制器#[路线('/',名称:'主页')]- public function index(): Response+ public function index(Request $ Request): Response{+ $问候='';+ if($ name = $请求 - >查询 - > get('hello')){+ $greet = sprintf('

Hello %s!< / h1 >”,htmlspecialchars函数(名字)美元);+}+返回新响应(<<< eof + $问候

欧宝娱乐app下载地址Symfonyは请求オブジェクトを通してリクエストされたデータを取得することができます。欧宝娱乐app下载地址Symfonyは、コントローラーの引数にこの型宣言があると、自動的に渡すことができます。 クエリー文字列にある的名字の値を取得して<标题>のタイトルに追加することができます。

ブラウザで,/へアクセスして,それから/ ?你好=法比安へ変えて,違いを見てみてください。

注釈

XSSの問題を避けるためにhtmlspecialchars函数()が呼ばれての気づきましましかか気づきなテンプレートエンジンスイッチする,自动的にサニタイズされ。

また、URLの一部の名字を指定することができます:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
--- a / src / controller / conferenceController.php+ + + b / src /控制器/ ConferenceController.php@@ -9,13 +9,19 @@使用sym欧宝娱乐app下载地址fony \ component \ routing \ annotation \ route;类ConferenceController扩展了AbstractController {- #[Route('/', name: 'homepage')]+ #[Route('/hello/{name}', name: 'homepage')]- public function index(): Response+ public function index(string $name = "): Response{+ $问候='';+ if ($name) {+ $greet = sprintf('

Hello %s!< / h1 >”,htmlspecialchars函数(名字)美元);+}+返回新响应(<<< eof + $问候

ルーティングの {名称}の部分は,ダイナミックなルートパラメーターです。ワイルドーカードのようなものです。これでブラウザで/你好と開いてから你好/法比安と変えても同じ結果が出すことができます。コントローラーに的名字と同じ引数(美元的名字)を指定することで,{名称}パラメーターのを取得することができます。


  • «前ステップ5:トラブルシューティング
  • 下一个”ステップ7:データベースをセットアップする

这项工作包括代码样本,是在a下获得的许可Creative Commons By-NC-SA 4.0许可证。