Laravel触ってみた
環境はざっくり↓こんなん
Windows×XAMPP(Apache)×MySQL/MariaDB×PHP
自分のスキルの前提としては
- 本職はWindowsServer×Apache×SQLServer×PHP(CodeIgniter)
- DBについてはMySQLの方が経験長い
- FWはZendベースの自社FWの経験が長かった
- Cake、Fuelあたりも経験あり、あまり好きじゃないタイプだった
- Laravelも一瞬触ったがなんか肌に合わず挫折した経験あり、実質未知の世界
という感じ。
CodeIgniter個人的にはわかりやすくて超好きなんですが
Laravelが人気なのは知ってるしユーザーが多いことのメリットもわかってるつもりだし、
なにより挫折したままなのは気に食わないので、やる。
他FWに比べると処理速度が懸念点といえばそうだけど、
まあ別に大量の細かいアクセスを捌く系のシステムでないならひとまずは気にしなくていいレベルかなとは思ってる。
Phalconも好きだよ。速いしかっこいいし。
自分用の覚書?作業記録?みたいな記事なので、知ってることに関してはそんなに書かない。
あと、触って覚えるタイプの人間なので、まず調べず触るところからやってる部分もある。
ということでもしこれを参考にしようとしている人がいたら、あてにしすぎないでください。
あとめんどくさいのでスクショで済ませてる部分が多く、コピペにも向かないです。
はいスタート。
準備
- 以下をインストールする
- XAMPP
- Composer
- Laravel
- 諸々調整して、Laravelのスタートページが出てくる状態にする
やり方は自分の過去記事を参考にしつつ。
複数プロジェクトの開発環境構築 - アナログCPU:5108843109
Windows×nginx×PHP8×Laravel ローカル環境構築してみる - アナログCPU:5108843109
まあここは本題じゃないのでどうでもいい。
ディレクトリ構造を把握する
マジで何もかもわからないところからスタートなんで、まずはデフォルトのディレクトリ構造についてググる。
- app
- だいたいのコードはここに書くらしい
- bootstrap
- 初期化用の諸々 autoloadとか
- config
- 名前のとおり、設定ファイルとか置く
- database
- 名前のとおりDB関連の諸々を置く…っぽいがいまいち分かっていない .envに接続設定書く(※後述)だけじゃアカンのか?
- lang
- 言語情報用。多言語対応サイトでもないと使う必要がない気はする
- public
- resources
- routes
- ルーティング用の設定を置くところっぽい。
- storage
- キャッシュファイルなどがここに入るらしい。あとは「ユーザーがアップロードしたファイル」なんかもここっぽい。
- tests
- テストコードを置くところ。本番環境には置かないディレクトリってこと?
- vendor
- Composerの依存内容を置くらしい。Composerについてもよくわかってないので未知すぎる
- 本番環境には置かなくていいのかなと思ったけど、autoload.phpがここにあったので必要だった。
Laravelのスタートページを移動させる
Laravelの新規プロジェクトを作った直後がこの状態。
バージョン9なんだ~、と何気なく調べたらかなり直近のリリースだったのか。
(これ書いてるのが2022/02/10、リリースが2022/02/08っぽい)
Laravel 9 Upgrade Memo
まあそれはともかくとして。
これはなんかの実装サンプルになるかもしれないけどここに居座られても困るので、ちょっと別の場所に移動してもらおうと思います。
どうやって表示してんのかな? と public/index.phpから順に追う…のは面倒そうだったので、
逆にviewレベルから見てみることに。
試しにこの英文の一部でgrepかけてみると、viewファイルらしきもの見つかりました。
resources\views\welcome.blade.php
あと、
storage\framework\views\0e9b7b4…74ed85a.php
みたいなファイルも見つかりました。
どうやら、controllerやview的な諸々からコンパイルしたもの?というかキャッシュファイル的なもの?をstorageに置いてるっぽいですね。
それはともかくviewファイルですが、
軽く調べたところ、LaravelにはデフォルトでBladeというテンプレートエンジンが乗っかっていて、それで書かれてますね。
おお~~わかりやすい。ある程度はこれ真似するだけでも書けそうじゃん。
で、このviewを呼んでるのはどこかな?ということで「welcome」でgrepかけてみると、
routes\web.php
内にありました。ルーティングですね。
Route::get('/', function () { return view('welcome'); });
ほ~。
じゃあこのwelcomeページは別URLによけておこう。
Route::get('/sample', function () { return view('welcome'); });
はいオッケー。わかりやすいじゃん。
これで、「/」だと404になり、「/sample」で先ほどのページが表示されるようになりました。
けどちょっと思ってたのと違ったというか。
知りたかったのは「特定のController呼び出して、処理の結果をviewに渡す」みたいな部分だったというか…。
ルーティングで直接view返すの⁉っていうのが衝撃でした。
普段使ってるCodeIgniterだと、必ずController経由することになるので。
で、そのへんのサンプルはないみたいなので、ぐぐってきました。
Laravelのルーティングの書き方を10分でサクッと学ぶ | Web Apps Labo
Laravelのルーティング(Routing)のまとめ! | codelikeなブログ
Laravel8でのルーティングで、コントローラーの指定の仕方4選 - Qiita
いや~待って ちょっとおっさん一気に覚えらんない 書き方のクセがでかい
ひとまずは
…という感じですね。
で、今回使ってるLaravelは9なので新しい書き方でいく必要があり、
先にルーティングするの難易度高そうなので、まずControllerを実際に作ってみます。
Controllerを作ってみる
…
…いや、どこにどう作るんだコレ?
またぐぐった結果、
コマンドプロンプトで
cd プロジェクトのディレクトリ php artisan make:controller HogeController
を実行
だそうです。
えっコントローラ作るのに毎回コマンド打つ…んですか…? ほんとに?
ほんとにできた。
お試しでHelloWorldするだけのメソッドを設置。
で、ルーティングに戻ります。
app\Http\Controllers\IndexController.php の index()なので、
Route::get('/', 'App\Http\Controllers\IndexController@index');
をweb.phpに追記してみました。
成功です。
Controllerからviewに値を渡して表示してもらう
じゃあ次はControllerでいろいろごにょごにょ処理して、それをviewに渡し、表示してもらうやつ。
といってもこれはさほど難しくはなさそう。
Laravel controllerからViewへ値(変数)を渡す
↓Controller
↓View(新しく作った)
↓結果
HTMLタグのエスケープ勝手にやってくれるの優秀ですね…しかもやりすぎてもない(inputタグの中とか)。
DBにアクセスし、テーブルの中身を取ってきて表示する
まずテーブル作って適当にデータ入れておきます。詳しくは省略。
Laravel側は、まず接続設定。
.envの中の↓を調整します。
今回はローカル環境ということでテーブル名だけ変更して終わり。
次、Controllerの中でSELECTしてくる処理を書きます。
最後、それをViewでもにょもにょします。
いや~そんな
こんな少ないわけないし、ぐぐりながら10分で書いたやつが一発で動くわけないじゃ~ん
動いた!?
動きました。ここまでできれば勝ったも同然ですね。
とりあえずここまで
あとは細かいところぐぐりながらいけばなんとかなりそうってレベルな気がします。
昔速攻で挫折したのどこだろう。ルーティングかな。