はじめに
個人的にメモしてたやつだけど、もし使う人が居たらってことで構築メモを落としておく。
だけどいまはLaravelが凄いから、こんなの出してもってのもある(汗)
導入と初期設定
導入環境はWin10のWSL。WSLじゃなくてままのUbuntuでも。
Apache2とphpはXAMPPじゃなくて、個別にモジュール追加でインストール。
Apache2 and PHP install and Composer Setup
サーバー環境はUbuntuだとaptで追加していく。また導入後にphp.ini
も忘れずに設定しておく。
sudo apt install curl zip git vim apache2 php8.1 mysql-server php8.1-cli php8.1-curl php8.1-intl php8.1-mbstring php8.1-xml php8.1-mysql libapache2-mod-php8.1
composerの導入
phpのパッケージ管理ツールです。入れておきましょう。
composer高速化
2021/11/04追記
Composerがv2になってからデフォルトで高速化されるようになりました!
なので下記の対応は不要になりました。
composer v1
Composerのパッケージダウンロードを並列化するプラグインPrestissimoを導入する。依存関係のパッケージが並列にダウンロードされるので、SymfonyやLaravelなどパッケージ数の多いフレームワークをComposerで利用する時には相当な時間短縮になる。 `composer global require hirak/prestissimo`Apache2 Setup
Apacheの設定と導入したPHPのモジュール有効化からRootディレクトリの設定。そして有効化の再起動をしていく。
apache2ctl -M
sudo /usr/sbin/a2enmod rewrite
sudo vim /etc/apache2/apache2.conf
sudo vim /etc/apache2/sites-available/000-default.conf
sudo vim /etc/apache2/sites-enabled/000-default.conf
sudo service apache2 restart
Git Setup
一応でコンソールにて済ませておく。上から
- Githubの登録ID
- 同じく今度はメールアドレス
- カラーパターンの設定
- git checkoutの短縮
- git commitの短縮
- git statusの短縮
- git branchの短縮
- 勝手に改行コードを変えない為の設定
git config --global user.name "GithubID"
git config --global user.email "GithubMail"
git config --global color.ui auto
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.hist 'log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short'
インストール(v4)
昔はsymfony new
とかで入れてた気がしたけど、今はcomposerでらくちん導入。
composer create-project symfony/skeleton project-name
Symphonyで使える便利なサーバの追加
昔はデフォで入ってたはずだけどv4から消えて、軽くなった感じ。確かに中身を見るとだいぶすっきりした印象がある。そしてインストールはいつものcomposer require server
でらくちん。
※サーバー起動(bin/console server:run
)したが、この時点ではデフォルトルートがないよと怒られた。何もないから当然。
作成を便利に作成するやつ
CakePHPで言うならbakeがsymfonyにもあるらしい。あるのとないのじゃかなり変わってくるから、かなり助かる(触ってたのはv2だから...)。
composer require maker
コントローラー作成の助け
正式名称はannotationの省略形。
SensioFrameworkExtraBundleをインストールします。SymfonyMakerBundleは、コントローラーを作成するとき、ルーティング定義にアノテーションを使います。アノテーションによるルーティングの制御は、SensioFrameworkExtraBundleが提供する機能です。
うん、よくわからないけど便利にしてくれるみたい。
composer require annot
デバッグツール
お馴染みの大好きデバッグツールで、これがないと開発がつらい。そしてテストもできるイケメン。
composer require debug-pack
いつも使ってるテンプレートエンジン追加(v2)
色々使って、結局落ち着くTwig。Laravel bladeもかなり良いと聞くけど(Laravelの使用率と検索率を見ながら)、なんとなく自分には合わなかった。地味にSmartyも好きだったりする。
composer require twig
作って動かす
コントローラーの作成とビューの作成。
コントローラー作成
コマンドでらくちん。
./bin/console make:controller DefaultController
動かしてみる
前はココで色々と変更が必要だったけどmakeする前にtwigが入ってると自動で認識して、設定してくれるようになったみたい。便利。
./bin/console server:run
メモツールつくる
動きはなんとなく分かったから、メモツールを作ってみる。
とりあえずDemoを拡張して、更に感覚を
自分が入れたのはsymfony/skeleton
で、名前の通り最低限のもの(そりゃ軽い)。なのでsymfony/symfony-demo
でFull-Verを使って弄る。
composer create-project symfony/skeleton-demo symfony-demo
一応起動確認
php bin/console server:run
でlocalhost:8000へ。すると日本語化されたDemoが。コレはありがたい...。
早速弄る
日本語になっているのは、どうやら言語ファイルがあるらしく、そこからロードして出してる様子。それにしてもSymfonyProfilerが有能過ぎて惚れる...。
Controller
Controllerはココに入ってた。
./src/controller
Lang
翻訳するには下記ファイルに書き足すことで翻訳追加が出来る。これによりグローバル化がかなり簡単であり、更にはSymfonyProfilerで抜けている翻訳があれば警告でお知らせをしてくれる親切機能。
./translations/messages.ja.xlf
DataBase
どうやらDemoはSQLiteを使ってデータを保存している。だけどそのやり取りをしているであろうModelが何処なのか、この時点では見当たらない。
とりあえず設定箇所はsymfonyのROOTに.envがあるのでこれで指定する。
DATABASE_URL=sqlite:///%kernel.project_dir%/var/data/blog.sqlite
設定後にphp bin/console doctrine:database:create
で.env.distの内容を読み取って作成してくれる。この辺はLaravelとほぼ同じ。
Databaseを作る
php bin/console make:entity (DBNAME)
にてsrc/Entity/(DBNAME).php
が出来るので、これを弄る。
でModelはどこよ
どうやらControllerでもDBの操作が可能みたいだけどskeleton-demoはsrc/Repository/
にてDBの操作をしていた。
ん、と思ってControllerに戻るとuse App\Repository\PostRepository;
の記述が、コレで呼んでたのか...。それを踏まえて読むとpublic function index(int $page, string $_format, PostRepository $posts): Response
と確かにPostRepositoryを呼んでる記述。なにこれ初見でこんなん気付けないって...。
じゃあViewは?
Controllerにて普通に呼び出されてた。ちなみに下記の$_formatはURLをそのままファイル名で呼んでいるので、そのための記述。
return $this->render('blog/index.'.$_format.'.twig', ['posts' => $latestPosts]);
まとめ
Slim3やCodeigniter3をメインとして使っていたが、慣れれば結構Symfonyも扱いやすいのではと、調べてみるとそう思った。あと割と色々と勉強で様々のフレームワークを触れてたので、意外とどうにかなった(CakePHP3 FuelPHP Laravel Lumen(Laravelのマイクロ版))。暇があればゴリッと何か作ってもいいかもと思いました(・ω・)
ただ、やはりSymfonyはYahooが採用しただけあって結構お硬いフレームワークなので学習コストが高そうとも思いました...。