Laravelの機能、ルール

#MVCフレームワークに基づく構成
#view
app/resources/view

Laravelではデフォルトで`blade`のテンプレートエンジンが組み込まれている。
viewを作成する場合、bladeテンプレートエンジンを使用する。



CSRF対策の記述

```
<from method="post" action="">
    @csrf
</from>
```


#controller
app/Http/Controllers

```
$ php artisan make:controller {ファイル名}
```

app/resources/view/home.blade.php にアクセス
usersのテーブルを取得する

```php

use Illuminate\Support\Facades\DB;

public function index()
    {
　　　　　$users = DB::table('users')->get();
        return view('home');
    }
```

トランザクション処理

```php
public function index(){
    DB::beginTransaction();
    
    try{
        //処理
        DB::commit(); 
    }catch(/Exception $e){
        DB::rollback();
    }

}

```

#model
app/database/factories

オプションに`-a`で`Model,migrate,seeds`ファイルが作成される

```
$ php artisan make:model {ファイル名} -a
```

論理削除の記述

```php
use Illuminate\Database\Eloquent\SoftDeletes;

class Friend extends Model
{
    use SoftDeletes;
    protected $dates = ['{カラム名}']; 
}

```

作成されたクラスは、同じ名前のテーブルと同期する。
`Friend`クラスと`friends`テーブルが自動で同期するルールとなる。
ルールに反している場合、`Friend`クラスで指定する
またプライマリーキーが`id`以外の場合も指定する

```php
class Friend extends Model
{
    protected $table = '{テーブル名}';
    protected $primaryKey = '{プライマリーキーのカラム名}';
}
```

アクセサの方法
アクセサの定義を行うと、予め取得するカラムのフォーマットを定義できる。

```php
class Friend extends Model
{
    public function get{プロパティ名}Attribute{
        return $this->{プロパティ名}.$this->{任意の文字};
    }
}
```
viewでプロパティ名を指定して表示できる。



#ルーティング
app/routes

```php
Route::get('{path}','{コントローラー名}@{メソッド名}');
```



#マイグレーション
app/database/migrations
マイグレーションファイルの作成

```
$ php artisan make:migration {ファイル名}
```

DBへテーブルを作成する


```
$ php artisan migrate
```

```php
public function up()
    {
        Schema::create('{テーブル名}', function (Blueprint $table) {
            $table->string('{カラム名}');
        });
    }
```

ロールバック時の処理

```
$ php artisan migrate:rollback
```


```php
public function doun()
    {
        Schema::create('{テーブル名}', function (Blueprint $table) {
            $table->string('{カラム名}');
        });
    }
```

マイグレーションのカラム更新パッケージインストール


```
$ composer require doctrine/dbal
```



#seed
app/database/seeds

```
$ php artisan db:seed
```

日本語に変換


```php:app/config/app.php
'faker_locale' => 'ja_JP',
```

インサート文

```php:database/factories/UserFactory.php
$result = DB::table('{テーブル名}')->insert([
            '{カラム名}' => '',
        ]);
```

```php:database/seeds/BookmarkSeeder.php
use App\models\Bookmark;

    public function run()
    {
        factory(Bookmark::class, 100)->create();
    }
```

seedの実行
`database/seeds/DatabaseSeeder.php` に実行する設定を記載する。

```php:database/seeds/DatabaseSeeder.php
    public function run()
    {
         $this->call(UserSeeder::class);
    }
```

#バリデーション
コントローラーのメソッドに記載する。
区切ることでバリデーションを複数指定できる。

```php
use App/rules/{独自バリデーションクラス名};

public function index(Reqest $reqest)
    {
　　　　　$reqest->validate([
            '{name名}' => '{バリデーション}|{バリデーション}',
            '{name名}' => '['{バリデーション}',new {独自バリデーションクラス名}]'
        ]);
    }
```

エラー文の日本語化
`resources/lang/en/validation.php` のバリデーション内容が表示される。
`resources/lang/ja/validation.php` ファイルを作成し日本語を記入する。
`config/app.php` を`ja`に変更する。

```php
'locale' => 'ja',
```

独自のバリデーションを追加する。

```
$ php artisan make:rule {クラス名}
```

app/Rules/{クラス名}.php

```php
    public function passes($attribute, $value)
    {
        if(preg_match({正規表現},$value){
            return true;
        }else{
            return false;
        }
    }
```

viewのバリデーションエラーの記載

```php
@if($errors->any())
    @foreach($errors->all() as $error)
        {{ $error }}
    @endforeach
@endif
```



#ログイン

```
$ php artisan make:auth
```


![laravel.png](https://camo.qiitausercontent.com/f1462fa81fed08b5e507608981c79d9af355c7aa/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3237323633352f31323664306364332d623731332d363831302d346633642d3861396464613162326631392e706e67)