🎷

PHP開発 2日目

2024/04/29に公開

Laravelやってみる

講座の垂れ流し

動画の垂れ流しでは全く身についていないLaravelです。
とりあえず何か作ってみよう。
Laravel sailでDockerとかうまく動かなかったので、普通にMAMPでやろう。

バージョン指定でインストール

Composerがインストールされている前提です。
Laravel11が出たようですが、ミドルウェアの書き方が変わっていて、情報があまりないのでバージョン10で作っていきます。

まずはターミナルからLaravelを任意のフォルダにインストール

composer create-project laravel/laravel omikuji "10.*"

コマンドを叩いたディレクトリ内でomikujiが作られて中にLaravelのファイル類がたくさん作成されましたね。

簡易サーバーで確認

では、簡易サーバーを立ててちゃんと動くか確認

php artisan serve

omikujiディレクトリ内にartisan用のファイルがあるんですね
だからartisanコマンドが
受け付けられるんだな

自動的にローカルサーバーが立ち上がるので、Laravelのウェルカムサイトが表示されればインストール完了

DBとの接続

今回はMySQLを使いましょう
といってもお手軽にMAMPのMySQLを起動させてそこにつなぎます。

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_omikuji
DB_USERNAME=root
DB_PASSWORD=root

DB_DATABASE名も変更して、MAPMのphpMyAdminから新しいスキーマを作って、その名前合わせて変更
今回はlaravel_omikujiという名前でスキーマを作成しました。

デフォルトでいくつかのマイグレーションファイルがあるので、マイグレーションしてみてDBをちゃんと繋がっているのか確認します。

php artisan migrate

ターミナルで下記のようにマイグレーションファイル分DONEとなっていればOK

   INFO  Preparing database.  

  Creating migration table .......................................................................... 40ms DONE

   INFO  Running migrations.  

  2014_10_12_000000_create_users_table .............................................................. 75ms DONE
  2014_10_12_100000_create_password_reset_tokens_table .............................................. 10ms DONE
  2019_08_19_000000_create_failed_jobs_table ........................................................ 40ms DONE
  2019_12_14_000001_create_personal_access_tokens_table ............................................. 67ms DONE

超便利ですね
大手SIerに派遣されて仕事していた時は、DBのテーブル情報は全部エクセル
目視とエクセル関数でチェック
エクセルのバージョン管理も更新しているのかわからない表
ITって何だっけ?といつも感じていました。

ルーティング

今回はDay1同様のおみくじアプリをLaravelで作ってみるのが目標
なので、認証関係はとりあえず使わずにルーティングとモデルとコントローラーとVIEWくらいかな、いじるのは。
どの講座でも、ここからLaravel Breezeのインストールとかに行ってしまうので、何が何だかわからなくなってしまいます。
正直、なんだよそれって感じです。今でも少し。

まずは、ルーティングですね。
どういうファイル構成にしようか。
Day1と同じく2ファイルで、名前入力してボタンを押したらその名前とともにおみくじの結果が出る感じですかね。

routesディレクトリのweb.phpでルーティングを設定しているんでしたね。
講座を垂れ流ししているので、少しはわかります。

web.php
Route::get('/', function () {
    return view('welcome');
});

デフォルトだとこれが書かれています。
get通信で、'/'ルートにアクセスされたら、関数(welcomeのviewへ移動する)を実行
この'welcome'というのは、viewsの中の「welcome.blade.php」のwelcomeを認識してるのかな?
bladeは初期状態でも使えるんだな。コンポーネントを使うならbreeze入れないとダメなのかな?
layoutフォルダ無いし、、、わかりませんね。
breeze入れてテンプレートやスロットの説明しているサイトもあるし。
とりあえず今日は動けばいいや

テーブルの追加

マイグレーションファイルとモデルを作って、テーブルからおみくじの情報を取り出せるようにする。
1テーブルに対して1モデルがルールだとどこかの講座で言ってたな、モデル名称はマイグレーションファイルの単数形で、最初が大文字
単数形、複数形の自信がないから確認方法

php artisan tinker
Psy Shell v0.12.3 (PHP 8.3.0 — cli) by Justin Hileman
> echo Str::plural('unsei');
unseis⏎

unseiの複数形はunseis

ついでにコントローラーも作ってしまいましょう

php artisan make:model Unsei -m -c

オプションについて調べていたらリソースオプションをつけるとCRUD用のコントローラーを作ってくれるのか。便利だな。
使ったことないけどやってみよう

php artisan make:model Unsei -m -c -r
   INFO  Model [app/Models/Unsei.php] created successfully.  

   INFO  Migration [database/migrations/2024_04_29_082522_create_unseis_table.php] created successfully.  

   INFO  Controller [app/Http/Controllers/UnseiController.php] created successfully.

3つのファイルが作られましたね

-rオプションの結果は?

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

あ、関数の一覧を作ってくれるだけなんですね。cake PHPのbakeでしたっけ?そんなやつを期待してしまった。

    public function up(): void
    {
        Schema::create('unseis', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });
    }

先ほど作ったマイグレーションファイルを編集しておみくじの結果を入れるカラムを作成
もう一度マイグレーションを実行

できたテーブルに手打ちで、大吉から大凶まで7つ分の情報をて入力

モデルとコントローラーあたりでハマる

難しいですね
eloquentでDBから抜き出したり、それをbladeファイルに投げたり等々結構ハマりました。
やはり講座を垂れ流ししても全く身についていないですね。

完成

ハマったので記事にする時間がなく、完成したコードをGitHubにあげておきます。
コントローラーで色々な処理を実装しているので、これがファットコントローラーの原因になってしまうのですね。

P.S.

マークダウン楽ですね。
SIer勤務の皆さんに是非知ってもらいたいです。

完成コード

Day2 Laravelおみくじアプリ

Discussion