configure Symfony4
Symfony4プロジェクトを新規作成し、webブラウザでアクセス出来るようになってからの設定に関する事柄です。具体的にはMySQLデータベースとの連携、Controllerの作成等の初期設定に係る事柄です。
.envファイルによる環境設定
「.env」とは、プロジェクトディレクトリ直下に配置されている環境定義用のファイルです。symfony1の頃はconfig配下に置かれていたデータベースに関する定義や、当該プロジェクトの挙動(例えば本番か開発か)を定義したり、メール送信時に使用するメールサーバの定義をしたりします。
データベースに関する定義は、最初からサンプルとして記述されているものを参考にします。
DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name?serverVersion=5.7
MySQLを利用する場合は上記の記述のうち「db_user」「db_password」等を実際に利用するものに変更します。
余談ですが、MySQL 5.7から一部の記述やセキュリティ設定が変更となりましたので、既存のやり方では上手く行きません。例えば新規にデータベースを作成してユーザ定義までする場合、MySQL 5.6以前は下記のような記述でした。
create database DBNAME character set utf8; grant all on DBNAME.* to DBUSER@localhost identified by 'PASSWORD'; flush privileges;
ところが、MySQL 5.7では上記のやり方は通りません。このため、下記のような記述を用いる必要があります(他にも方法はあります)。
create user DBUSER@localhost identified with mysql_native_password by 'PASSWORD'; grant all privileges on DBNAME.* to DBUSER@localhost; flush privileges;
create userが必須になったことと、既存のパスワード形式を用いるのであればmysql_native_passwordという記述を用いるという事が重要です。なお、パスワード設定ルールもより複雑なものになりましたので、運用上どうしても簡易なパスワードを用いる必要がある場合はrootユーザ辺りでMySQLに入り、下記のコマンドを実行します。
SET GLOBAL validate_password_length=4;
SET GLOBAL validate_password_policy=LOW;
他にもクエリの実行結果をCSV等外部ファイルに書き出す事が出来なくなっていたりしますが、その場合は/etc/my.cnfに「secure-file-priv = “”」と書いてMySQLを再起動すると制約が解除されます。
最低限のBundleの導入
Bundleの導入はプロジェクトと同様にcomposerを使用します。例えばmaker-bundleの導入は下記のようなコマンドを実行します。
$ composer require symfony/maker-bundle --dev
このコマンドを実行する事により、プロジェクトディレクトリ直下のcomposer.jsonが更新され、maker-bundleが導入されます。他方、一度導入したものを削除する場合は下記のコマンドを実行します。
$ composer remove symfony/maker-bundle --dev
ただし、依存関係がある場合は正常に動作しない場合がありますので注意が必要です。composer.jsonを直接修正して「composer update」を実施するなど、削除対象により違う操作を実施する必要があります。
※記述中。
Controllerの作成
Controllerとは、symfony1でいうところのmoduleのようなものです。実処理に関しては基本的にController内に記述します。
Controllerの作成には、bin/console make:controllerの実行が推奨されますが、これを実施するためにはmaker bundleの導入が必要です。プロジェクトディレクトリで下記のコマンドを実行することで導入されます。
$ composer require symfony/maker-bundle --dev
末尾に–devと記載されていますが、これは開発環境にのみ必要という事に依ります。composer.jsonを見て頂くと「require-dev」にのみmaker-bundleが導入される事になり、本番側(vendor)には入りません。
※本番環境と開発環境の違いや、移行の方法については別項で解説します。
maker-bundleが導入出来ましたら、次にControllerを作成します。symfony1の時は「symfony generate:module MODULENAME」でしたが、Symfony4では上記の通り「console make:controller」を使用します。
$ ./bin/console make:controller Choose a name for your controller class (e.g. AgreeableElephantController): testController created: src/Controller/testController.php created: templates/test/index.html.twig Success! Next: Open your new controller class and add some pages!
上記は一例です(testControllerという名前で作成しています)。Symfony3の時はやや冗長なディレクトリ構成になっていましたが、Symfony4では「src/Controller」配下になっています。また、テンプレートファイルについても「templates/CONTROLLERNAME/index.html.twig」に配置されます。
なお、初期状態でdefaultControllerが用意されていますが、基本的にこれがホームページ(トップページ)となります。この名称は変更せず、必要に応じて別のControllerに処理を転送するかRoutingの設定をした方が良さそうです。
Routing
※現在記述中
エラーページ
※現在記述中