【Laravel概要】 Laravelとは

# バージョン

Laravel8より約1年毎に新バージョンのリリース
Laravel9.0 = PHP8.0以上が必要

### バンドル
コンパイル015/02 Laravel5.0 Laravel Elixir (Gulp)
2017/01 Laravel 5.4 Laravel Mix (webpack)
2022/06 Laravel9.18 Viteに変更

### Vite
Node.js/npm のインストールが必須
package.json / package-lock.json 設定管理ファイル
vite.config.js Vite設定ファイル

### Laravel Breeze (認証ライブラリ)
【Laravel6.x~ Laravel / ui】
    View(PHP) Blade
    js Vue.js / React.js
   css Bootstrap

【Laravel8.x~ Laravel Breeze】
Blade
Alpine.js
Tailwindcss

【Laravel8.x~ Jetstream】
Livewire + Blade
Inertia.js + Vue.js
Tailwindcss

# 初期設定

・タイムゾーン
・言語設定
・デバックバー
&emsp;&emsp;インストール
```
composer require barryvdh/laravel-debugbar:^3.7
```
&emsp;&emsp;(バージョン指定しない場合は自動的に最新版)
&emsp;&emsp;envのAPP_DEBUGで表示切り替え
・エラーメッセージの日本語化
・データベース設定
&emsp;&emsp;DBクライアントからデータベースとユーザーを作成
&emsp;&emsp;envにも追記
&emsp;&emsp;確認
```
php artisan migrate
```
エラー対処

https://coinbaby8.com/access_denied.html

# MVCモデル
### Model (DBとやり取り)
ORM/ORマッパー (DBとのやり取りをLaravel以外で書ける)
Object-Relational Mapping (オブジェクト関係マッピング)

モデルファイルの作成
```
php artisan make:model Test
```
コントローラとマイグレーションの同時作成
```
php artisan make:model Test -mc
```

【DBから情報を取得する方法】
速度は多少クエリビルダが早いが、エロクアントを優先的に使用する方がメリットが多い。

1.Eloquent
&emsp;&emsp;use App\Model\Test;
&emsp;&emsp;$test = Test::all(); //モデル名::メソッド
&emsp;&emsp;dd($tests); //コレクション型(配列を拡張した型)

&emsp;&emsp;リレーション(複数テーブルの連帯)、スコープ(クエリの分割)が使用できる

2.クエリビルダ
&emsp;&emsp;SQLに近い構文(rawで生のSQLも書ける)
&emsp;&emsp;DB::table('test')->get(); //ファサード(複雑な関連クラスを持つクラス群を簡単に利用するための窓口)
&emsp;&emsp;getやfirstで確定。確定しなければQueryBuilder型

&emsp;&emsp;use Illuminate\Support\Facades\DB;

&emsp;&emsp;コレクション型
```
&emsp;DB::table('tests')->where('text', '=', 'bbb')->select('id', 'text')->get();
```
QuryBuilder

```
DB::table('tests')->where('text', '=', 'bbb')->select('id', 'text');
```

### View (見た目)
resources/views/
xxxx.blade.php


### Controller (処理)
```
php artisan make:controller TestController
```

app/Http/Controllers/　配下に自動生成
Routing アクセスの振り分け

routes/web.php
Migration (DBテーブルの履歴管理)

databases/migrations
モデルは単数形、マイグレーションは複数形で記述→Laravelが自動判定

ファイル作成
```
php artisan make:migration create_tests_table
php artisan migrate //DBに反映

php artisan migrate:fresh //テーブルを全て削除し再生成
php artisan migrate:refresh //ロールバックして再生成
```
Artisan
```
	// キャッシュ削除
    php artisan cache:clear
    php artisan config:clear
    // artisan コマンドリスト表示
    php artisan list
```

## tinker (DB簡易接続)

対話型　コマンドでデータ保存・閲覧
```
php artisan tinker
//保存
 $test = new App\Models\Test;
$test->text = "aaa";
$test->save();
App\Models\Test::all(); //全件表示
```

## Laravel起動処理DIとサービスコンテナ
参考記事

https://qiita.com/namizatork/items/801da1d03dc322fad70c


エントリポイント(public\index.php)からアクセスが始まる
1. view
2. public/index.php
3. HTTPカーネル
4. ルーティング
5. ミドルウェア
6. コントローラ
7. view  

### DI(依存性の注入)
クラスの中でインスタンス生成(new)するのではなく、外部で用意して注入
サービスコンテナ
DIをまとめて担う

## Blade (テンプレートエンジン)
拡張子 blade.php
{{}}エコー文は、XSS攻撃を防ぐために、HPのhtmlspecialchars関数を通して自動的に送信される。

@csrf
    CSRF保護ミドルウェアがリクエストをバリデートできるように、フォームへ隠しCSRFトークンフィールドが自動生成される。

### 記述方法

ルーティング->コントローラ->ビュー

```php5:routes/web.php
use App\Http\Controllers\TestController; //ファイル内で使用可能に
Route::get('tests/test', [TestController::class, 'index']); //配列で書く(バージョンで書き方が異なる)
```
```php:App/Http/Controllers/TestController.php
    public function index()
    {
    //view() ヘルパ関数 フォルダ名.ファイル名
    return view('tests.test'); 
    }
```
```php:resources/views/test/test.blade.php
test
```
読み込む↓
```php:App/Http/Controllers/TestController.php
use App/Models/Test; //Testモデルを読み込む
php function index()
{
$values = Test::all(): //全件取得

//dd($values); //処理を止めて内容を確認できる

//compact()でView側に変数を渡すと楽
return view('tests.test', compact('values')); 
}
``