Symfony簡単なチュートリアル①最初のアクション

【メモ】

Symfony インストーラーをダウンロードします。

curl -sS https://get.symfony.com/cli/installer | bash
// ターミナル結果
The Symfony CLI was installed successfully!

Use it as a local file:
  /Users/USER_NAME/.symfony5/bin/symfony

Or add the following line to your shell configuration file:
  export PATH="$HOME/.symfony5/bin:$PATH"

Or install it globally on your system:
  mv /Users/USER_NAME/.symfony5/bin/symfony /usr/local/bin/symfony

Then start a new shell and run 'symfony'

Composerを使用してSymfonyプロジェクトを作成し、Gitバージョン管理下にプロジェクトを設定します。

symfony new --full blog  // または
symfony new --webapp
// 上記コードがやっていること
1. /opt/homebrew/bin/composer create-project symfony/website-skeleton /Users/USER_NAME/webroot/blog  --no-interactionコマンドを実行して、Composerを使用してSymfonyプロジェクトを作成。このコマンドは、指定したディレクトリ(/Users/USER_NAME/webroot/blog)にSymfonyのwebsite-skeletonをインストールする。

2. git init /Users/USER_NAME/webroot/blogコマンドを実行して、Gitバージョン管理下にプロジェクトを設定。このコマンドは、指定したディレクトリ(/Users/USER_NAME/webroot/blog)で新しいGitリポジトリを初期化する。

これらの手順を経て、Symfonyの新規プロジェクトが作成される。
[OK] Your project is now ready in /Users/USER_NAME/webroot/blog    

このチュートリアルでは、 Apache2とNginxではなく、単純な組み込み PHP Web サーバーを使用することにします。

ページを作成するには、ルートとコントローラーを作成する必要があるので、まずはコントローラーの作成から。ブログ投稿のリストを表示するブログのホーム ページを作成します。  

※もしsymony5を指定してプロジェクトを作成したい場合は以下のコマンドを用います。(上記のコマンドではいつの間にかsymfony6のプロジェクトが作成されていたため)

composer create-project symfony/website-skeleton my_project "5.*"

これでWebサーバーを稼働させると、以下のようにエラーが出ました。

[Application] Sep 17 05:49:23 |ERROR  | REQUES Uncaught PHP Exception Symfony\Component\HttpKernel\Exception\NotFoundHttpException: "No route found for "GET https://127.0.0.1:8001/favicon.ico" (from "https://127.0.0.1:8001/")" at ..省略..

ルーティング設定が正しくなかったようです。config/routes.yamlの設定を確認したところ、全てコメントアウトされていたので、それをアンコメントしてControllerのファイル名を正しく設定すると解決しました。

具体的には以下のようにしました。

// ルーティングの設定...config/routes.yaml
index:
    path: /
    controller: App\Controller\MainController::index
 // コントローラーとルートの設定...src/Controller/MainController.php
<?php

namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;

class MainController
{
    /**
     * @Route("/", name="index")
     */
    public function index()
    {
        return new Response('HelloWorld!');
    }
}

この記事を書いた人