Laravel 機能拡張説明


#ページネーション

```php:app/Http/Controllers
use DB;
use App\Hoge

class HogeController extends Controller
{
    public function page(){
        $hoges = Hoge::paginate(20);
        
        return view('public', ['hoge' => $hoges]);
    }
}
```


```php:app/resources/views/public.blade.php
    <form class="form-horizontal" method="post" action="public/page">
        @csrf
        @foreach($hoge as $val )
            <div>{{ $val->id }}</div>
        @endforeach
    </form>
    {{ $hoge->links() }}
```


#動的ルーティング

動的な値を正規表現で数値のみ許容する

```php:app/routes/web.php
Route::get('user/{id}', function($id){
    return ;
})->where('id', '[0-9]+');
```

#IDの詳細ページ表示


`route`でリンクを設定する場合

```php:app/resources/views/public.blade.php
@foreach($hoge as $val)
    <a href="{{route('bookmarks.show',$val->id)}}"><div>{{ $val->id }}</div>
@endforeach

```

```php:app/routes/web.php
Route::get('user/{id}', function($id){
    return ;
})->where('id', '[0-9]+')->name('bookmarks.show');
```

`action`でリンクを設定する場合

```php:app/resources/views/public.blade.php
@foreach($hoge as $val)
    <a href="{{action('HogeController@show',$val->id)}}"><div>{{ $val->id }}</div>
@endforeach

```

```php:app/Http/Controllers
use DB;
use App\Hoge

class HogeController extends Controller
{
    public function show(Friend $hoges){
        $hoges = Hoge::paginate(20);
        
        return view('public', ['hoge' => $hoges]);
    }
}
```




#CRUDのルーティング

```php:app/routes/web.php
Route::resource('public', 'HogeController'); 
//store.index.create.show.update.destroy.editのメソッドを一括指定ができる
```



#確認ダイアログ

```php:app/resources/views/public.blade.php
 <button onclick="return confirm('本当に登録しますか')" class="btn btn-default">送信</button>
```

#フラッシュメッセージ

```php:app/Http/Controllers
    public function create(Request $request){
        Friend::create($request->all());
        
        return redirect()->route('public')->with('status', '登録しました');
    }
```

`components`フォルダと`alert.blade.php`ファイルを作成する

```php:app/resources/views/components/alert.blade.php
@if(session()->has('status'))    //statusセッションのチェック
    <div class="alert alert-success">{{ session('status') }}</div>
@endif
```

```php:app/resources/views/public.blade.php
    @include('components.alert')
```



#入力バリデーションチェック

```
$ php artisan make:request bookmarkRequest

Request created successfully.
```

バリデーションのルールを指定する

```php:/Users/ryo/Desktop/laravel/app/app/Http/Requests/bookmarkRequest.php
class bookmarkRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;  //変更
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'last_name' => 'required',
            'first_name' => 'required',
        ];
    }
}

```

バリデーションのアラート名称を設定する

```php:app/resources/lang/ja/validation.php
return [

    'required' => '必須項目です',

    'attributes' => [
        'last_name' => '名前',   //viewのname属性を指定する
    ],
];
```


```php:app/resources/views/public.blade.php
<div class="col-sm-6">
<input type="text" name="last_name" class="form-control @error('last_name') is-invalid @enderror">
    @error('last_name')
        <span class="invalid-feedback" role="alert">
            <strong>{{ $message }}</strong>
        </span>
    @enderror
</div>
```