LoginSignup
1
0

More than 1 year has passed since last update.

Symfony Handson lesson-1

Last updated at Posted at 2023-05-07

この記事について

Udemyの動画講義,"Symfony 6 Framework Hands-On 2023"についての備忘録です
https://www.udemy.com/course/symfony-framework-hands-on/
Symfony6について,TwitterクローンのWebアプリを開発しながら学習するという内容になっています

Symfony 101

基本コマンド

# Symfonyの要件チェック
symfony check:require

# プロジェクトの作成
symfony new symfony-handson --version="6.1.*"

# プロジェクトの起動
symfony server:start

# コマンド一覧
symfony console

# プロジェクトでの脆弱性の確認
symfony check:security

プロジェクト構成

bin/

  • Symfonyコンソール
  • 基本的に編集する必要なし

config/

  • プロジェクトの構成ファイル

public/

  • エントリポイント
  • スタイルシート,Javascript,画像,その他アセット等も配置される

src/

  • Controller等
  • アプリケーションのすべてのビジネスロジック

var/

  • キャッシュ,ログ等

vendor/

  • サードパーティライブラリ
  • 直接変更することはない

composer.json

  • すべての外部ライブラリ等を定義

composer.lock

  • 直接変更はしない
  • インストールされた依存関係等をリスト表示

.env

  • 環境変数を定義

処理の流れ

ブラウザからのリクエスト
→HTTP Server→PHP Binary→Symfony Application(index.php)→Controller→テンプレート等のレスポンス→HTTP Server
→ブラウザへレスポンスを返す

Controllerの作成

src/Controller/HelloController.phpを作成

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class HelloController {
  public function index() {
    return new Response("Hi!");
  }
}

ルーティングを定義
config/routes.phpに以下を追記

app_index:
    path: /
    controller: App\Controller\HelloController::index

これによって,symfony server:startコマンドで取得したURL(https://127.0.0.1:8000)でHelloControllerが読み込まれ,画面上にHi!と表示される

メモ

  • コントローラーを定義したらルート定義を併せて行う
  • Controllerの1つのファイルで複数クラスを定義してはならない
  • symfony console debug:routerコマンドですべてのルートとコントローラーを表示できる

ルートの簡易定義

Controllerに以下のように追記することでルート定義をController内で行える

  #[Route('/', name: 'app_index')]
  public function index(): Response {
    return new Response("Hi!");
  }

Twig

Twigとは

  • Symfonyのテンプレートエンジン(HTMLとデータを併せて表示)
  • composer require twigでインストール
  • 基本的にはtemplate/に配置
    • HelloControllerに使用するTwigであればtemplate/hello/xxx.html.twig

以下のように,テンプレートエンジンをレスポンスとして返すことでHTMLにデータを埋め込める

  • $this->render('Twigへのパス', データ);
HelloController.php
  #[Route('/{limit<\d+>?3}', name: 'app_index')]
  public function index(int $limit): Response {
    return $this->render('hello/index.html.twig', 
      ['message' => implode(',', array_slice($this->messages, 0, $limit))]
    );
  }

Controllerから受け取った変数は{{ }}で表示

hello/index.html.twig
<div>
  {{ message }}
</div>

render等

テンプレート継承

  • 親テンプレートの中で子テンプレートを表示させられる
{% block body %}{% endblock %}
{% extends '親テンプレート名' %}

{% block body %}
// テンプレートを記述
{% endblock %}

for構文・if構文

  • 通常のプログラミングと同様に使用可能
  {% if messages|length > 0 %}
    {% for message in messages %}
      <div>{{ message }}</div>
    {% endfor %}
  {% else %}
    There's nothing yet!  
  {% endif %}

フィルタ・関数

テンプレートの再利用

  • {{ incluce("呼び出すTwigのパス", {渡し先のデータ名: 渡すデータ}) }}
{{ include("hello/_message.html.twig", {message: message}) }}
hello/_message.html.twig(呼び出し先のTwig)
<div>This is message.</div>
<div>{{ message }}</div>

リンクの生成

pathを利用

<a href="{{ path('app_show_one', { id: key }) }}">{{ message.message }}</a>

コードの自動生成

Maker Bundle

Controllerの自動作成

  • 以下コマンドを実行
    • symfony console make:controller
  • 任意のコントローラー名を入力

profiler

注意

  • 本番環境にインストールしたり有効にしてはいけない

profilerとは

  • https://symfony.com/doc/current/profiler.html
  • 開発環境上でのデバッグツール
    • リクエスト,レスポンス,パフォーマンス,SQL,コントローラー等を確認できる
  • 以下コマンドでインストール
    • composer require --dev symfony/profiler-pack

ステータスコード,コントローラー,ルート名等
スクリーンショット 2023-05-07 21.42.59.png

ページ生成にかかった時間
スクリーンショット 2023-05-07 21.44.23.png

リクエストを処理するのに必要なメモリ量,レンダリング時間
スクリーンショット 2023-05-07 21.44.26.png

リクエストとかレスポンスが見れる
スクリーンショット 2023-05-07 21.49.27.png

それぞれのファイル処理時間や全体のフローも分かる
スクリーンショット 2023-05-07 21.49.27.png

ルートの一覧を確認
スクリーンショット 2023-05-07 21.51.59.png

Twigに関する情報
スクリーンショット 2023-05-07 21.52.23.png

過去のリクエストも見れる
スクリーンショット 2023-05-07 21.54.26.png

上部のリンクをクリックして戻れる
スクリーンショット 2023-05-07 21.55.59.png

パフォーマンスの悪いボトルネックを発見するのに便利

最後に

昔Symfonyの公式ドキュメントのチュートリアルを触ったことがあり,今回の内容はほぼチュートリアルの内容でした(ただしチュートリアル以降はほぼ触ってなかった)
最後のProfilerはほぼ見たことなかったのですごく便利そうだと思いました
https://symfony.com/doc/current/setup.html

最近アウトプットしてなかったので,次回以降も備忘録的に書いていこうと思います(かなり雑メモになってしまった)
ではまた

1
0
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
1
0