2回目なので、さくさく進んだところも多かったです。
ローカルのWebサーバーの起動
symfony CLIコマンドは、開発用に最適化されたWebサーバーとしても機能する。
Symfonyとうまく連携してくれるが、開発用としての使用のみで、決して本番環境では使用してはいけない(公式サイトより)。
プロジェクトのディレクトリからバックグラウンドでWebサーバを動かしてみる。
$ symfony server:start -d
サーバは 8000 番からはじまる使用可能なポートで立ち上がります。ショートカットを使用して、 CLI からブラウザでwebサイトを開いてみましょう:
ゼロの状態からプロダクションまでやってみよう (Symfony 5.4 Docs)
$ symfony open:local
無事ページが表示されました。
スクリーンの一番下にデバッグツールバーが表示されている。これで正しい情報を見ることができる。
小さな感嘆符(!)をクリックすると、Symfony profiler 内のログから “実際の” 例外のメッセージを見ることができます。スタックトレースを見たいときは、左のメニューの “Exception” リンクをクリックしてください。
トラブルシューティング (Symfony 5.4 Docs)
コードに問題があるときは、問題が起きている箇所を調べることができる「Exceptions」ページが表示される。
【Tips】
トラブルシューティングの際は、「symfony server:log;」コマンドを使うこと。デバッグ時にログはとても役に立つ。このコマンドは、WebサーバーやPHPやアプリケーションのログをtailしてくれる。
本番のデバッグ
本番サーバーのデバッグは、より複雑で「Symfony profiler」は使えないし、ログの情報も冗長にはしていないそう。でも、ログのtailは可能とのこと。
symfony cloud:logs --tail
また、Webコンテナ上にSSHで接続することも可能だそうだ。
symfony cloud:ssh
コントローラーの生成
make:controller
コマンドで最初の コントローラー を作成しましょう:$ symfony console make:controller ConferenceController
このコマンドは
コントローラーを作成する (Symfony 5.4 Docs)src/Controller
ディレクトリ以下にConferenceController
クラスを作成します。生成されたクラスはちゃんと動くようなボイラープレートが既に入っています:
========【以下、引用】========
src/Controller/ConferenceController.php
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
をブラウザで開くと、このコントローラが実行され、レスポンスが返されます。
ホームページにマッチするようにルートを微調整します:
--- 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 のページを返すようにしましょう:
--- 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レスポンスを返すこと。