2回目なので、さくさく進んだところも多かったです。
ローカルのWebサーバーの起動
symfony CLIコマンドは、開発用に最適化されたWebサーバーとしても機能する。
Symfonyとうまく連携してくれるが、開発用としての使用のみで、決して本番環境では使用してはいけない(公式サイトより)。
プロジェクトのディレクトリからバックグラウンドでWebサーバを動かしてみる。
1 |
$ symfony server:start -d |
サーバは 8000 番からはじまる使用可能なポートで立ち上がります。ショートカットを使用して、 CLI からブラウザでwebサイトを開いてみましょう:
ゼロの状態からプロダクションまでやってみよう (Symfony 5.4 Docs)
1 |
$ symfony open:local |
無事ページが表示されました。
スクリーンの一番下にデバッグツールバーが表示されている。これで正しい情報を見ることができる。
小さな感嘆符(!)をクリックすると、Symfony profiler 内のログから “実際の” 例外のメッセージを見ることができます。スタックトレースを見たいときは、左のメニューの “Exception” リンクをクリックしてください。
トラブルシューティング (Symfony 5.4 Docs)
コードに問題があるときは、問題が起きている箇所を調べることができる「Exceptions」ページが表示される。
【Tips】
トラブルシューティングの際は、「symfony server:log;」コマンドを使うこと。デバッグ時にログはとても役に立つ。このコマンドは、WebサーバーやPHPやアプリケーションのログをtailしてくれる。
本番のデバッグ
本番サーバーのデバッグは、より複雑で「Symfony profiler」は使えないし、ログの情報も冗長にはしていないそう。でも、ログのtailは可能とのこと。
1 |
symfony cloud:logs --tail |
また、Webコンテナ上にSSHで接続することも可能だそうだ。
1 |
symfony cloud:ssh |
コントローラーの生成
make:controller
コマンドで最初の コントローラー を作成しましょう:
1 $ symfony console make:controller ConferenceControllerこのコマンドは
コントローラーを作成する (Symfony 5.4 Docs)src/Controller
ディレクトリ以下にConferenceController
クラスを作成します。生成されたクラスはちゃんと動くようなボイラープレートが既に入っています:
========【以下、引用】========
src/Controller/ConferenceController.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class ConferenceController extends AbstractController { #[Route('/conference', name: 'conference')] public function index(): Response { return $this->render('conference/index.html.twig', [ 'controller_name' => 'ConferenceController', ]); } } |
#[Route('/conference', name: 'conference')]
アトリビュートが、 ConferenceController
の index()
メソッドをコントローラにしています(設定は、コードに隣接しています)。
/conference
をブラウザで開くと、このコントローラが実行され、レスポンスが返されます。
ホームページにマッチするようにルートを微調整します:
1 2 3 4 5 6 7 8 9 10 11 |
--- a/src/Controller/ConferenceController.php +++ b/src/Controller/ConferenceController.php @@ -8,7 +8,7 @@ use Symfony\Component\Routing\Annotation\Route; class ConferenceController extends AbstractController { - #[Route('/conference', name: 'conference')] + #[Route('/', name: 'homepage')] public function index(): Response { return $this->render('conference/index.html.twig', [ |
コード内でホームページを参照したいときは、ルートの 名前
が便利です。 /
パスをハードコードせずに、 ルート名を使いましょう。
デフォルトで表示されるページの代わりに、シンプルな HTML のページを返すようにしましょう:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
--- a/src/Controller/ConferenceController.php +++ b/src/Controller/ConferenceController.php @@ -11,8 +11,13 @@ class ConferenceController extends AbstractController #[Route('/', name: 'homepage')] public function index(): Response { - return $this->render('conference/index.html.twig', [ - 'controller_name' => 'ConferenceController', - ]); + return new Response(<<<EOF +<html> + <body> + <img src="/images/under-construction.gif" /> + </body> +</html> +EOF + ); } } |
ブラウザを更新します:
========【引用ここまで(引用元:コントローラーを作成する (Symfony 5.4 Docs))】========
更新したら、以下の画面が表示されました!ここまでOKです!
Controller
Conttollerの主な役割は、リクエストに対応するHTTPレスポンスを返すこと。