2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Symfony入門 ~ Quick Tour 1/3 The Big Picture ~

Last updated at Posted at 2020-07-19

この記事は私の勉強も兼ねてSymfonyの公式ドキュメントQuick Tour/The Big Pictureを翻訳したものです。手探りで翻訳したので加減がわからずカタカナが多くなってしまっている気がします。(普通にブラウザの翻訳機能を使いながら英語のドキュメントを読んだ方がわかりやすいと思います。^^;)

こちらのドキュメントは【非公式】 Symfony 日本語ドキュメントでもご確認いただけます。【非公式】 Symfony 日本語ドキュメントのリポジトリはこちらです。プルリク等いただけると嬉しいです。私が記事内で紹介されているコードを動作確認した時のコードはこちらにあります。

この記事およびコードは公式ドキュメントのライセンスに従いCreative Commons BY-SA 3.0となります。

全体像

10分でSymfonyを使い始めましょう!最も重要な概念を理解し、プロジェクトの構築を開始するには本当にこれだけです。

以前にWebフレームワークを利用していた場合は、Symfonyに親しみやすいはずです。
そうでない場合は、全く新しいWebアプリケーションの開発方法へようこそ。
Symfonyはベストプラクティスを採用し、安全簡単にアップグレードができる後方互換性、そして長期的なサポートを提供します。

Symfonyのダウンロード

まずは Composer がインストールされており、PHP7.1.3以降がインストールされていることを確認してください。

準備が整ったらターミナルで次を実行:

    $ composer create-project symfony/skeleton quick_tour

これにより、最小で強力なSymfonyアプリケーションの quick_tour/ ディレクトリが作成されます。:

    quick_tour/
    ├─ .env
    ├─ bin/console
    ├─ composer.json
    ├─ composer.lock
    ├─ config/
    ├─ public/index.php
    ├─ src/
    ├─ symfony.lock
    ├─ var/
    └─ vendor/

すでにブラウザでプロジェクトをロードできますか? はい!
Nginx またはApache をセットアップし、 public/ ディレクトリをドキュメントルートに設定します。
しかし、開発のためにはSymfonyのローカルWebサーバをインストールして次のように実行することをお勧めします。:

    $ symfony server:start

ブラウザで http://localhost:8000 へアクセスして新しいアプリケーションを試してみましょう!:

スクリーンショット 2020-07-19 17.16.26.png

基礎: ルート、コントローラ、レスポンス

プロジェクトには約15個のファイルしかありませんが、洗練されたAPI、堅牢なWebアプリ、またはマイクロサービスの準備ができています。
Symfonyは小さなものから始まりますが、あなたと共にスケールします。

しかし先に進む前に、最初のページを作成して基本を掘り下げましょう。

config/routes.yaml で始めます。ここで新しいページのURLを定義できます。
ファイルに既に存在する例のコメントアウトを外します。:

    # config/routes.yaml
    index:
        path: /
        controller: 'App\Controller\DefaultController::index'

これは ルート と呼ばれます。
それはページ (/) のURLと "controller" を定義します。
このURLにアクセスしたときに呼び出される 関数 です。
その関数はまだ存在しないので、作成しましょう!

src/Controller に新しい DefaultController クラスと index メソッドを作成します。::

src/Controller/DefaultController.php
    namespace App\Controller;

    use Symfony\Component\HttpFoundation\Response;

    class DefaultController
    {
        public function index()
        {
            return new Response('Hello!');
        }
    }

これだけです!ホームページ http://localhost:8000/ にアクセスしてみましょう。
SymfonyはURLがルートと一致することを確認し、新しい index() メソッドを実行します。

コントローラは、1つのルールを持つ通常の関数で、Symfony Response オブジェクトを返す必要があります。
ただし、そのレスポンスには、単純なテキスト、JSON、または完全なHTMLページなど、何でも含めることができます。

しかし、ルーティングシステムはるかに強力です。ルートをもっと面白くしましょう。:

# config/routes.yaml
index:
-     path: /
+     path: /hello/{name}
    controller: 'App\Controller\DefaultController::index'

このページのURLが変更され、今 /hello/* となり、 {name} は全てに一致するワイルドカードのように機能します。
そしてそれは良くなります!コントローラも更新します。:

src/Controller/DefaultController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class DefaultController
{
-     public function index()
+     public function index($name)
    {
-         return new Response('Hello!');
+         return new Response("Hello $name!");
    }
}

http://localhost:8000/hello/Symfony にアクセスして、ページを試してください。
あなたは Hello Symfony! を確認できるでしょう。
URLの {name} の値は、コントローラーの $name 引数として使用できます。

しかし、さらに簡単になる可能性があります。アノテーションサポートをインストールしましょう。:

    $ composer require annotations

次に、 # の文字を追加してYAMLルートをコメントアウトします。:

    # config/routes.yaml
    # index:
    #     path: /hello/{name}
    #     controller: 'App\Controller\DefaultController::index'

代わりに、コントローラーメソッドの 真上 にルートを追加します。:

src/Controller/DefaultController.php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
+ use Symfony\Component\Routing\Annotation\Route;
class DefaultController
{
+    /**
+     * @Route("/hello/{name}")
+     */
     public function index($name) {
         // ...
     }
}

これは以前と同じように機能します!
しかし、アノテーションを使用することにより、ルートとコントローラーは互いに隣接して存在します。
別のページが必要ですか?
DefaultController に別のルートとメソッドを追加します。::

src/Controller/DefaultController.php
    namespace App\Controller;

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

    class DefaultController
    {
        // ...

        /**
         * @Route("/simplicity")
         */
        public function simple()
        {
            return new Response('Simple! Easy! Great!');
        }
    }

ルーティングは さらに いろいろなことができますが、それは別の機会にとっておきましょう!
まさに今、アプリにはさらに多くの機能が必要です!
テンプレートエンジンやロギング、デバッグツールなどのように。

次はFlex: Compose your Applicationとなります。
Quick Tourの残りの2記事については翻訳したらQiitaにも投稿しようと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?