BETA

Laravel7.0-基礎-

投稿日:2020-01-17
最終更新:2020-04-24

(2020-04-24 Laravel7.0対応)

ルーティング

Route::get('user/{user}', '[email protected]')->name('user'); // メソッド パラメータ コントローラー 名前  
Route::get('user/{user?}', '[email protected]')->name('user');  // 任意パラメータ  
Route::redirect('here', 'there', 301); // リダイレクト ステータスコード指定  
Route::view('welcome', 'welcome', ['name' => 'Taylor']); // ビュー 名前  

Route::resource('photos', 'PhotoController')->only('index'); // リソースルート  
Route::resource('photos', 'PhotoController')->except('index'); // リソースルート  
Route::apiResource('photo', 'PhotoController'); // APIリソースルート index store show update destroy  

// ルートグループ  
Route::namespace('Admin')->group(function () {  
    // "App\Http\Controllers\Admin"名前空間下のコントローラ  
});  
Route::domain('{account}.myapp.com')->group(function () {  
    Route::get('user/{id}', function ($account, $id) {  
        // URL {account}.myapp.com/user/{id}  
    });  
});  
Route::prefix('admin')->group(function () {  
    // URL /admin/*  
});  

Route::current(); // ルートクラス  
Route::currentRouteName(); // ルート名 未定義ならnull  
Route::currentRouteAction(); // アクション名 未定義ならnull  

ミドルウェア

artisan make:middleware CheckAge  
Route::get('/', '[email protected]')->middleware('first', 'second');  
Route::middleware(['first', 'second'])->group(function () {  
    // firstとsecondミドルウェアを使用  
});   

CSRF保護

<form method="POST" action="/profile">  
  @csrf <!--<input type="hidden" name="_token" value="7753xoabfc5SK4hv1mJo3NGwC47DLZ2ZbmGoJihX">-->  
</form>  

<meta name="csrf-token" content="{{ csrf_token() }}">  
$.ajaxSetup({  
    headers: {  
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')  
    }  
});  

コントローラ

artisan make:controller PhotoController --resource // リソースコントローラ  
artisan make:controller PhotoController --resource --model=Photo // モデル指定  
return view('user.profile', ['user' => User::findOrFail($id)]);  

public function __construct()  
{  
    $this->middleware('log')->only('index');  
    $this->middleware('subscribed')->except('store');  

    $this->middleware(function ($request, $next) {  
        return $next($request);  
    });  
}  
@method('PUT') <!-- <input type="hidden" name="_method" value="PUT"> -->  

HTTPリクエスト

$request->path() // パス ドメイン以降  
$request->is('admin/*') // パスと一致するかどうかを返す  
$request->url() // クエリ文字列なし  
$request->fullUrl() // クエリ文字列付き  
$request->method() // メソッド  
$request->isMethod('post') // メソッドと一致するかどうか  

$request->all() // 全入力を配列として受け取る  
$request->input() // queryとformの全入力の配列  
$request->input('user.name', 'default') // queryとformから デフォルト値  
$request->query() // queryの全入力の配列  
$request->query('name', 'Helen') // queryから デフォルト値  
$request->name // 動的プロバティ  
$request->only(['username', 'password']) // queryとformから 一部取得  
$request->except(['credit_card']) // queryとformから 一部取得  
$request->has(['name', 'email']) // 指定値がすべて存在する場合 true  
$request->filled('name') // 指定値が存在し、かつ空ではない場合 true  

$request->flash() // 現在の入力を一時的にセッションに保存  
$request->flashOnly(['username', 'email']) // 一部入力をフラッシュデータとしてセッションに保存  
$request->flashExcept('password') // 一部入力をフラッシュデータとしてセッションに保存  
$request->old('username') // フラッシュデータを取得  
old('username') // フラッシュデータを取得  

$request->cookie('name') // クッキーを取得  

$request->file('photo') // ファイルの取得  
$request->hasFile('photo') // ファイルが存在する場合にtrue  
$request->file('photo')->isValid() // アップロードに成功している場合にtrue  
$request->photo->path() // ファイルパス  
$request->photo->extension() // 拡張子  
$request->photo->store('images', 's3') // ファイルをストレージに保存  
$request->photo->storeAs('images', 'filename.jpg', 's3') // ファイル名を指定してストレージに保存  

HTTPレスポンス

return 'Hello World'; // 文字列をHTTPレスポンスに変換  
return [1,2,3]; // 配列をJSONレスポンスに変換  
return response('Hello World', 200)->header('Content-Type', 'text/plain'); // ヘッダーを付与  

return response('Hello World', 200)->cookie($name, $value, $minutes, $path, $domain, $source, $httpOnly); // クッキーを付与  
Cookie::queue('name', 'value', $minutes); // クッキーを付与  

return redirect('home/dashboard'); // URLへのリダイレクト  
return back()->withInput(); // 直前のページへのリダイレクト  
return redirect()->route('profile', ['id' => 1]); // 名前付きルートへのリダイレクト パラメータ指定  
return redirect()->route('profile', [$user]); // 名前付きルートへのリダイレクト パラメータ指定  
return redirect()->action('[email protected]'); // コントローラアクションへのリダイレクト  
return redirect()->away('https://www.google.com'); // 外部サイトへのリダイレクト  
return redirect('dashboard')->with('status', 'Profile updated!'); // フラッシュデータを保存してリダイレクト  
return redirect()->intended('dashboard'); // 認証フィルターにかかる前にアクセスしようとしていたURLへリダイレクトする。  
                       // リダイレクトが不可能な場合は指定されたURLへ  

return response()->view('hello', $data, 200); // ビューレスポンス  

return response()->json([  
    'name' => 'Abigail',  
    'state' => 'CA'  
]); // JSONレスポンス  

ビュー

View::exists('emails.customer') // ビューが存在する場合true  
return view()->first(['custom.admin', 'admin'], $data); // 利用可能な最初のViewを返す  

全ビュー間のデータ共有
ビューコンポーザ

URL生成

url("/posts/{$post->id}") // http://example.com/posts/1  
url()->current(); // クエリ文字列を含んだ現在のURL  
url()->full(); // クエリ文字列を含んだ現在のURL  
url()->previous(); // 直前のリクエストの完全なURL  

route('post.show', ['post' => 1]) // 名前付きルートのURL  
route('post.show', ['post' => $post]) // 名前付きルートのURL  

action('[email protected]', ['id' => 1]) // コントローラアクションのURL  

URL::defaults(['locale' => $request->user()->locale]); // routeのデフォルト値をミドルウェアで設定  

HTTPセッション

config/session.phpでセッションの保存場所を設定可能

  • file storage/framewrk/sessionsに保存
  • cookie
  • database
    artisan session:table  
    artisan migrate  
  • memcached/redis
    要predis/predisパッケージ
  • array
    リクエスト間で継続しない
    通常テストに使用
session('key', 'default') // セッションから値を取得  
session(['key' => ''value]) // セッションに値を保存  

$request->session()->get('key', 'default') // セッションから値を取得  
$request->session()->all() // セッション内の全データを取得  
$request->session()->exists('users') // セッション内の指定値があればtrue  
$request->session()->has('users') // セッション内の指定値がnullでなければtrue  
$request->session()->put('key', 'value') // セッションに値を保存  
$request->session()->push('user.teams', 'developers') // セッション内の配列に値を追加  
$request->session()->pull('key', 'default') // セッションの値を取得後削除  
$request->session()->flash('status', 'Task was successful!') // フラッシュデータを保存  
$request->session()->reflash() // フラッシュデータを次のリクエストまで持続させる  
$request->session()->keep(['username', 'email']) // 特定のフラッシュデータだけ次のリクエストまで持続させる  
$request->session()->forget('key') // セッションからデータを削除  
$request->session()->flush() //セッションから全データを削除  

$request->session()->regenerate() // セッションIDの再発行  

カスタムセッションドライバの追加

バリデーション

コントローラ内でのバリデーション

$validatedData = $request->validate([  
    'title' => 'required|unique:posts',  
    'body' => 'required',  
]);  

viewでのエラー取得
※$errors変数はShareErrorsFromSessionミドルウェアによりビューに結合される

$errors->any() // エラーがある場合true  
$errors->all() // エラーを取得  

フォームリクエストバリデーションクラス作成

artisan make:request StoreBlogPost  
function rules(){...} // バリデーションルールの定義  
function withValidator(){...} // フォールリクエスト実行後の処理を追加  
function authorize(){...} // フォームリクエストの認可  
function messages(){...} // エラーメッセージの定義  

名前付きエラー

redirect('register')->withErrors($validator, 'login');  
{{ $errors->login->first('email') }}  

バリデーションインスタンス

$validator = Validator::make($request->all(), [  
    'title' => 'required|unique:posts',  
    'body' => 'required',  
]);  

$validator->after(function ($validator) {  
    if ($this->somethingElseIsInvalid()) {  
        $validator->errors()->add('field', 'Something is wrong!');  
    }  
});  

if ($validator->fails()) {  
    //  
}  

$validator->errors()->first('email') // 最初のエラーメッセージ取得  
$validator->errors()->get('email') // 指定したフィールドの全エラーメッセージを取得  
$validator->errors()->all() // 全フィールドの全エラーメッセージを取得  

バリデーションルール

ルール 説明
accepted yes,on,1,true
active_url dns_get_record()により、有効なURLである
after:日付 指定された日付より後日付の代わりに他のフィールドを指定することも可能
alpha 全部アルファベット文字
alphas_dash 全部アルファベット文字と数字、ダッシュ(-)、下線(_)
alpha_num 全部アルファベット文字と数字
array 配列であること
before:日付 指定された日付より前日付の代わりに他のフィールドを指定することも可能
between:最大値,最小値 最小値から最大値の間文字数、数値、配列サイズ、ファイルサイズが評価される
boolean true,false,1,0,"1","0"
confirmed フィールド名+_confirmationのフィールドと同じ
date 日付
date_equals:日付 指定した日付を同じ
date_format:フォーマット フォーマット定義と一致
different:フィールド 指定されたフィールドと異なる
digits:値 数値で値の桁数
digits_between:最小値,最大値 整数で、桁数が最小値から最大値の間
distinct 配列の場合、フィールドに重複した値がない
email メールアドレス
exists:DB名.テーブル,カラム 指定されたデータベーステーブルに存在
file アップロードに成功したファイル
filled 存在する場合に空ではないこと
image 画像(jpg,png,bmp,gif,svg)
in:foo,bar 指定したリストの中の値に含まれている
in_array:フィールド 指定したフィールドの値のどれかであること
integer 整数値であること
json JSON
max:値 指定された値以下文字数、数値、配列サイズ、ファイルサイズを評価
min:値 指定した値以上文字数、数値、配列サイズ、ファイルサイズを評価
not_in:foo,bar,... 指定された値のリストに含まれない
nullable nullを許容
numeric 数値
password 認証中のユーザーのパスワードと一致
regex:正規表現 正規表現にマッチ
required フィールドが存在し、空でないこと
same:フィールド 指定されたフィールドを同じ値であること
size:値 指定された値と同じサイズであること文字数、数値、配列サイズ、ファイルサイズ
string 文字列
unique:テーブル,カラム,除外ID,IDカラム 指定されたデータベーステーブルで一意であること
Rule::exists('staff')->where(function ($query) {  
    $query->where('account_id', 1);  
}),  

カスタムバリデーションルール

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

プログラミング関連の気になったことをまとめて残しておく

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう