20211007のlaravelに関する記事は4件です。

Laravelの認証のGuard

Laravelの認証には「Guard」と「Provider」という概念がある。 今回は「Guard」について一度整理してみる。 Guard 公式による定義は以下。 Guards define how users are authenticated for each request. For example, Laravel ships with a session guard which maintains state using session storage and cookies. デフォルトでは以下のGuardが用意されている。 - SessionGuard - TokenGuard - RequestGuard またinterfaceは以下。 Guard 上記公式による定義の通り、Guardはリクエストごとにユーザーを認証する方法を定義しているが、どうやって定義しているかをinterfaceを使って見てみる。 check() /** * Determine if the current user is authenticated. * * @return bool */ public function check(); 現在のユーザーが認証されているかを確認し、認証されていればtrueを返す。 guest() /** * Determine if the current user is a guest. * * @return bool */ public function guest(); 現在のユーザーがguest、つまり未認証かどうかを確認し、未認証であればtrueを返す。 check()の反転。 user() /** * Get the currently authenticated user. * * @return \Illuminate\Contracts\Auth\Authenticatable|null */ public function user(); 認証済みのユーザーを返す。 id() /** * Get the ID for the currently authenticated user. * * @return int|string|null */ public function id(); 認証済みのユーザーのIDを返す。 validate() /** * Validate a user's credentials. * * @param array $credentials * @return bool */ public function validate(array $credentials = []); ユーザーの識別情報を検証する。OKであればtrueを返す。 setUser() /** * Set the current user. * * @param \Illuminate\Contracts\Auth\Authenticatable $user * @return void */ public function setUser(Authenticatable $user); 認証済ユーザーをセットする。 interfaceを見て interfaceを見たら大体使い方が分かってくる。 ログイン時の検証をvalidate()で行い、OKであればそのユーザーをsetUser()でセットしてする。 認証済みかどうかをチェックしたい場合はcheck()、guest()を使う。 認証済みのユーザー情報を取得したい場合はuser()やid()を使う。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel8 コントローラの使い方

Laravelにおけるコントローラクラスを理解しよう 人気のPHPフレームワークLaravelを習得しよう 第4回 https://codezine.jp/article/detail/11524 こちらで勉強しててLaravel8ではハマったのでメモします。 おそらく記事はver8以前の記述ではないかと思います。 1.実装内容(エラー版) ページに記載通りに ①Control Class \app\Http\Controllers\HelloBladeWithDataController.php <?php namespace App\Http\Controllers; // (1) use App\Http\Controllers\Controller; // (2) class HelloBladeWithDataController extends Controller // (3) { public function __invoke() // (4) { $data["name"] = "武者小路"; // (5) return view("helloWithData", $data); // (5) } } ②web.php web.php Route::get("/chap4/helloBladeWithData", "HelloBladeWithDataController"); ③View Class \resources\views\helloWithData.blade.php <?php namespace App\Http\Controllers; // (1) use App\Http\Controllers\Controller; // (2) class HelloBladeWithDataController extends Controller // (3) { public function __invoke() // (4) { $data["name"] = "武者小路"; // (5) return view("helloWithData", $data); // (5) } } 2.エラー内容 ◆メッセージ UnexpectedValueException Invalid route action: [HelloBladeWithDataController]. ◆イメージ 3.原因 Larave8でWeb.phpの記載ルールが変わった模様。。 4.対処法 web.php // エラー例 //Route::get("/chap4/helloBladeWithData", "HelloBladeWithDataController"); // 正解 Route::get("/chap4/helloBladeWithData", \App\Http\Controllers\HelloBladeWithDataController::class); 5.おまけ invoke使わない例 url control class control method /chap4/helloMusha \App\Http\Controllers\Chap4Controller helloMusha /chap4/helloNakano 同上 helloNakano \app\Http\Controllers\Chap4Controller.php <?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class Chap4Controller extends Controller { public function helloMusha() // (1) { $data["name"] = "武者小路"; // (2) return view("helloWithData", $data); // (2) } public function helloNakano() // (3) { $data["name"] = "中野"; // (4) return view("chap3.hello", $data); // (4) } } web.php Route::get("/chap4/helloMusha", [\App\Http\Controllers\Chap4Controller::class,'helloMusha']); Route::get("/chap4/helloNakano", [\App\Http\Controllers\Chap4Controller::class,'helloNakano']); 参考元
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel での ajax を利用したファイルアップロード

はじめに Laravelを使っている案件でファイルアップロードを行う機会があったので、実装方法を記します。 なぜajaxを利用したかというと、編集画面というフォームの中でファイルアップロード機能を実装したかったから(編集画面で画面遷移することなくファイルアップロードのみ行いたかったから) HTML <div> <label for="" class="">ファイルのアップロード</label> <div class=""> <input type="file" class="" id="upload_file" name="upload_file" accept="pdf, xlsx" style=''> </div> <input type="button" value="アップロード" id="upload" data-toggle="modal" data-target="#file_upload_modal" class="" style=''> </div> @component('includes.popup_modal', ['id' => 'file_upload_modal']) @slot('title') ファイルのアップロード @endslot @slot('body') ファイルのアップロード <label style="" class="" id="searchErrorMessage"></label> @endslot @slot('footer') <button type="button" id="file_upload_btn" class="">アップロード</button> <button type="button" class="" data-dismiss="modal">キャンセル</button> @endslot @endcomponent アップロードボタンをクリックするとモーダルを表示して「アップロード」ボタンを選択する事でアップロード処理を行います。 モーダルは別ファイルで管理しています。 ajax <script> $(document).ready(function () { $('#file_upload_btn').on('click', function() { //ajaxでのcsrfトークン送信 $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); //アップロードするファイルのデータ取得 var fileData = document.getElementById("upload_file").files[0]; //フォームデータを作成する var form = new FormData(); //フォームデータにアップロードファイルの情報追加 form.append("file", fileData); $.ajax({ type: "POST", url: "{{ route('ajax_file_upload', ['id' => $id']) }}", data: form, processData: false, contentType: false, success: function (response) { if(response.is_success) { //モーダルの処理 //エラーメッセージ非表示 $('#searchErrorMessage').html(''); $('#searchErrorMessage').hide(); //モーダルを閉じる $('#file_upload_modal').modal('toggle'); } else { //モーダルでのエラーメッセージ表示処理 var msg = ""; $.each(response.errors_message, function (i, v) { msg += v + "<br>"; }); $('#searchErrorMessage').html(msg); $('#searchErrorMessage').show(); } }, error: function (response) { //エラー時の処理 } }); }) }) </script> headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } ここでCSRF保護のためcsrf-tokenをヘッダーに設定します。 これを行わないとエラーになります。 あとは var form = new FormData(); フォームデータを作成してあげてこれを指定のControllerに渡します。 ここでは url: "{{ route('ajax_file_upload', ['id' => $id']) }}", ajax_file_upload というrouteに渡してます PHP(LaravelのController) Controllerでファイル情報を受け取ってサーバに保存します。 public function uploadFile(Request $request, $id){ $response = []; //元ファイルのファイル名取得 $fileName = $request->file('file')->getClientOriginalName(); //拡張子チェック $ext = pathinfo($fileName)['extension']; $check_extension = ['xlsx', 'pdf']; if(!in_array($ext, $check_extension, true)){ $response = [ 'is_success' => false, 'errors_message' => ["エクセルファイルかPDFファイルのみアップロード可能です"] ]; return response()->json($response); } //ファイル保存 $upload_file_save = config('upload'); $request->file('file')->storeAs($upload_file_save . $id, $fileName); $response = [ 'is_success' => true, 'errors_message' => [""] ]; return response()->json($response); } $fileName = $request->file('file')->getClientOriginalName(); getClientOriginalName で元のファイル名を取得できます。 ※元ファイル名を利用しなかった場合はPHPが任意に決めたファイル名になります。 $response = [ 'is_success' => false, 'errors_message' => ["エクセルファイルかPDFファイルのみアップロード可能です"] ]; エラーが起こった際に(この際は拡張子チェックでエラー)アップロードする際に確認を行ったモーダルにエラーメッセージを返します。 $upload_file_save = 'upload' . $id; $request->file('file')->storeAs($upload_file_save, $fileName); storeAs でファイル名の指定が可能です。ここではアップロードした元のファイル名。 また、アップロード先のディレクトリは指定しなければ storage/app となります ここでは storage/app/upload/{$id} となります。 さいごに これで最低限の実装は出来る、はず、です 間違いなどありましたらご指摘ください。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel構成

はじめに laravelにふれる機会が増えてきたため、ディレクトリ構成をメモしておきます。 laravelのディレクトリ構成 ─── Laravel ├── app ・・・アプリケーションのロジック ├── bootstrap ・・・laravelフレームワークの起動コード ├── config ・・・設定ファイル ├── database ・・・MigrationファイルなどDB関連 ├── public ・・・Webサーバのドキュメントルート ├── resources ・・・ビューや言語変換用ファイルなど ├── routes ・・・ルーティング用ファイル ├── storage ・・・フレームワークが使用するファイル ├── tests ・・・テストコード └── vendor ・・・Composerでインストールしたライブラリ
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む