- 投稿日:2020-09-09T23:47:05+09:00
Laravelで更新項目をkey-valueで取得して動的にValidationを実施して更新を実施する
TL; DR
APIの開発をしていると、通常はFormRequestで更新項目を取得し、validationを実施します。
しかし、更新する項目のみをリクエストとして送信する、かつ1項目のみとする場合は、通常の実装ではこの限りとはなりません。
そのため、少しとトリッキー
冗長なやり方で実装してみます。環境
- PHP7.4
- Laravel7.2
通常の更新処理の実装
通常、以下の要領で更新処理のリクエストを送信します。
{ "name": "名前", "mail": "test@exmaple.com", "gender": 1 }このリクエストに対応するFormRequestは、以下のとおりです。
<?php namespace App\Http\Request\Api; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class UpdateRequest extends FormRequest { /** * @return bool */ public function authorize(): bool { return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules(): array { return [ 'name' => ['required', 'string'], 'mail' => ['required', 'email'], 'gender' => ['required', Rule::in(1,2)], ]; } /** * バリデーションエラーのカスタム属性の取得 * * @return array */ public function attributes() { return [ 'name' => '名前', 'mail' => 'メールアドレス', 'gender' => '性別', ]; } }key-value形式での実装
今回は、以下の形式で更新する項目名をkeyに、更新する値をvalueに含めたリクエストを送信します。
{ "key": "mail", "value": "test@exmaple.com" }この場合、通常通りの実装では、Validationは十分にできません。それは、keyで渡される項目をどのルールを適用してValidationの検証をすればよいかわからないからです。
そのため、Validationをする項目を動的に設定するように対応します。
<?php namespace App\Http\Request\Api; use App\Enum\Gender; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; class UpdateRequest extends FormRequest { private array $keys = [ 'name', 'mail', 'gender' ]; /** * @return bool */ public function authorize(): bool { return true; } /** * @return array */ public function rules(): array { return [ 'key' => ['required', 'string', Rule::in($this->keys)], 'value' => ['required'], 'name' => ['max:15'], 'mail' => ['email'], 'gender' => [Rule::in(Gender::validateList())], ]; } /** * Get data to be validated from the request. * * @return array */ public function validationData() { $data = $this->all(); if (empty($data['key']) || empty($data['value'])) return $data; // keyで設定された値を連想配列のキーとして設定する $data[$data['key']] = $data['value']; return $data; } /** * バリデーションエラーのカスタム属性の取得 * * @return array */ public function attributes() { return [ 'key' => '項目名', 'value' => '属性値', 'name' => '名前', 'mail' => 'メールアドレス', 'gender' => '性別', ]; } }先ず、
ruleメソッド
では、key
とvalue
を必須項目に設定します。また、このとき設定可能とするkey
の値を$keys
で取得し、keyのValidationルールにRule::in($thit->keys)
を設定します。しかし、そのままだとValdiationの検証をしたい項目とそのルールが紐づいていません。そのため、Validationが実施される前に呼び出さる
validationDataメソッド
にて、あたかもその項目でリクエストが来たかのようにふるまう
よう、値の置き換えをします。public function validationData() { $data = $this->all(); if (empty($data['key']) || empty($data['value'])) return $data; // keyで設定された値を連想配列のキーとして設定する $data[$data['key']] = $data['value']; // ここで値の置き換え return $data; }この処理をすることで、あたかも以下の形式のリクエストが送信されたかのようにふるまうことができます。
変換前のリクエスト
{ "key": "mail", "value": "test@exmaple.com" }変換後のリクエスト
{ "mail": "test@exmaple.com" }更新処理の際には、key-valueの各値を更新値の連想配列に含めれば更新が実施されます。
/** * @param UpdateRequest $request * @return JsonResponse */ public function __invoke(int $id, UpdateRequest $request): JsonResponse { $user = User::find(id)->get(); $user->update([ $request->get('key') => $request->get('value') ]); return response()->json($user, 200); }果たして、使いどころがあるかはわかりませんが、動的にValidationを行う一例でした。
- 投稿日:2020-09-09T23:39:28+09:00
【Laravel】バッチでユーザーにメール送信
継続は力なり。めげずに今日も備忘録。
バッチの理解を深める為、簡単な処理を実装してみた。環境
PHP 7.3.8
Laravel 6.18.35本日のお題
バッチでメールを送ってみる。
今回は実装するアプリケーションの登録ユーザーに一括送信するもの。メールの環境設定
mailtrap.ioというSMTPのダミーサーバーを利用する。
mailtrap.ioを利用する事で送信したメールは指定したアドレス宛てには送信されずに、mailtrap.ioの画面で結果を確認する事が出来るので、非常に便利です。会員登録したら直ぐに使えます。mailtrap.ioの
Inboxes
からDemo inbox
に遷移して、SMTP情報を確認します。
その情報を元に.envを編集します。.envMAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=587 MAIL_USERNAME=mailtrap.ioのSMTP情報を参照 MAIL_PASSWORD=mailtrap.ioのSMTP情報を参照 MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=test@example.com MAIL_FROM_NAME="Example"バッチ処理を書く
バッチコマンドクラスを生成する。
$ php artisan make:command SendMailCommandSendMailCommand.php<?php namespace App\Console\Commands; use Illuminate\Console\Command; use App\User; //メール送信用ファサード use Illuminate\Support\Facades\Mail; class SendMailCommand extends Command { /** * The name and signature of the console command. * * @var string */ //コマンドの名前 protected $signature = 'users:send_mail'; /** * The console command description. * * @var string */ protected $description = 'バッチの説明'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { //モデルからユーザー情報を取り出して $users = User::all(); //メールアドレスで繰り返し foreach ($users as $user) { echo $user['email']."\n"; Mail::raw("これバッチでメールしているよ", function($message) use ($user) { //toで送信先、subjectで件名 $message->to($user->email)->subject('test'); }); } } }これでバッチが完成
ですが〜
このままバッチコマンドを実行しても失敗する事があります。Swift_TransportException : Expected response code 250 but got code "530", with message "530 5.7.1 Authentication requiredこれが出た時はキャッシュをクリアしてあげましょう。
$ php artisan cache:clear $ php artisan config:cache改めてバッチコマンドを実行
php artisan users:send_mailmailtrap.ioで正しく受信出来ているか確認してみましょう。
上手くいっていますね!参考
- 投稿日:2020-09-09T23:18:32+09:00
【Laravel】マイグレーション
Laravel公式ドキュメント-マイグレーションの私的アウトプット
準備
マイグレーションを試すためDBも用意した
項目 名前 DBユーザ名 testuser DB test マイグレーション
マイグレーションとはDBのバージョンコントロール
マイグレ−ション作成
構文php artisan make:migration create_テーブル名_tableテーブル名は複数形にする
2つの--create
と--table
オプションがある。
公式によればこう説明されている
--table
と--create
オプションも、テーブル名とマイグレーションで新しいテーブルを生成するかを指定するために使用できます。これらのオプションは生成するマイグレーションスタブの中へ指定したテーブルをあらかじめ埋め込みます。
参考
Laravel 7.x データベース:マイグレーション何言ってるかわかんないから以下コマンドを実行
php artisan make:migration create_users1_table php artisan make:migration create_users2_table --table=users php artisan make:migration create_users3_table --create=users php artisan make:migration add_votes_to_users_table --table=usersそうしてわかったことはupメソッドの中でSchemaクラスの静的メソッドが変わる
オプション 説明 --create オプションなしと変わらない --table すでに存在するテーブルを更新する マイグレーション構造
メソッド 説明 up 新しいテーブル、カラム、インデックスを追加 down upメソッドの処理をもとに戻す マイグレーション実行
php artisan migrate[オプション1] [オプション2]オプション
オプション 説明 :rollback 最後のマイグレーション操作にロールバック :refresh 最初似ロールバックして migrate
コマンドを実行。つまりデータベース全体を作り直すのに適してる:fresh 全テーブル削除後に migrate
コマンドを実行オプション2
オプション 説明 --seed シード実行 テーブル
テーブル作成
例Schema::create('users', function (Blueprint $table) { $table->id(); });テーブル名変更
Schema::create
を使うSchema::rename($from, $to);テーブル削除
Schema::drop('users'); Schema::dropIfExists('users');
drop
かdropIfExists
メソッドを使う
dropIfExists
を使っていったほうが良さげかなカラム
カラム作成
Schema::table
を使う例Schema::table('users', function (Blueprint $table) { $table->string('email'); });テーブル作成のマイグレーションでオプションなしで作成されたファイルに書かれている
$table->id();
の意味が載っていた↓
カラムタイプ 意味 $table->id();
$table->bigIncrements('id')
のエイリアスカラム修飾子
NULLを許さない定義にするときとかは
nullable
メソッドを使うSchema::table('users', function (Blueprint $table) { $table->string('email')->nullable(); });カラム変更
まずは準備
composer require doctrine/dbal
カラム属性の変更
change
メソッドを使うstringカラムの文字長を変更する例//文字長を25から50に変更 Schema::table('users', function (Blueprint $table) { $table->string('name', 50)->change(); });NULL値設定可能に変更する例Schema::table('users', function (Blueprint $table) { $table->string('name', 50)->nullable()->change(); });
カラム名変更
renameColumn
メソッドを使う
ここで先のcomposerで追加したものを使う例Schema::table('users', function (Blueprint $table) { $table->renameColumn('from', 'to'); });カラム削除
dropColumn
メソッドを使うvotesカラムを削除Schema::table('users', function (Blueprint $table) { $table->dropColumn('votes'); });この引数に配列を渡すと複数カラムを削除できる
複数カラムを削除Schema::table('users', function (Blueprint $table) { $table->dropColumn(['votes', 'avatar', 'location']); });
- 投稿日:2020-09-09T20:55:39+09:00
Laravelのバリデーションでエラー時の遷移先を制御する
問題
Laravel
のバリデーションでエラーになった際、入力時のページに戻らないLaravel
のバリデーションでエラーになった際に入力時のページへ戻る際、値は保持されない原因
Laravel
でバリデーションを適用した際、エラー発生時に入寮時の画面などに戻る際、GET
メソッドで遷移されるから自分は
Request
のvalidate
メソッドを利用し、バリデーションを適用していたため、ルールやエラーメッセージなどの設定はできても、その後の制御ができておらず、冒頭のような問題が発生していた。
バリデーション 5.5 Laravelを見ると、Request
以外にもバリデーションを設定できる方法があったので、それを試してみたら問題が解決したので、その方法を記載する。解決策
validator
を利用するvalidator
validator
はコントローラに直接記入して利用する。
基本となるのはこの形。app/Http/Controllers/SampleController.phpuse Validator; class SampleController extends Controller { public function sample(Request $request) { $validator = Validator::make($request->all(), [ //バリデーションルールの記入 ], [ //エラーメッセージの記入 ]); if ($validator->fails()) { return redirect('home') ->withErrors($validator) ->withInput(); //エラー時の処理 } //バリデーションが通った時の処理 } }
Validator::make
でRequest
のValidate
メソッドと同じように、バリデーションルールやエラーメッセージを指定する。
Validator::make
で宣言したバリデーションルールを満たさなかった場合、$validator->fails() {}
が実行される。
redirect
: 遷移先の指定withErrors($validator)
: 遷移先に$validator
を渡す。withInput()
: 遷移先にInput
があり、渡したい値があれば、ここに指定。
Validator
を使ってリダイレクト先を指定することで、遷移先ページの指定は解決しそう。
ちなみに、リダイレクト先の指定はroutes\web.php
のname()
で指定した値も指定できる。routes\web.phpRoute::get('/home', 'HomeController@index')->name('home');Validatorのカスタマイズ
情報編集画面
→情報編集確認画面
→編集完了画面
みたいな流れでLaravel
のプロジェクトを作成していたとする。
その際、先程のredirect()
だと渡せる情報に限界がある場合などが考えられる。
しかし、$validator->fails() {}
で指定できるのはredirect()
だけではない。
その例を以下に記載する。app/Http/Controllers/EditCheckController.phpuse Validator; class EditCheckController extends Controller { public function sample(Request $request) { $validator = Validator::make($request->all(), [ 'name' => 'required|max:20', 'email' => 'required|email', 'body' => 'required', 'delete_flag' => 'boolean', //バリデーションルールの記入 ], [ 'name.required' => '名前を入力してください。', 'name.max' => '名前は20字以内で入力してください。', 'email.required' => 'Eメールを入力してください。', 'email.email' => 'Eメールはメールアドレス形式で入力してください。', 'body.required' => '本文を入力してください。', 'delete_flag.boolean' => '0か1を入力してください。', //エラーメッセージの記入 ]); if ($validator->fails()) { $edit_id = $request -> input('edit_id'); $name = $request -> input('edit_name'); $email = $request -> input('edit_email'); $body = $request -> input('edit_body'); $delete_flag = $request -> input('edit_delete_flag'); $edit_data = User::where('id', $edit_id) -> first(); $edit = array( 'id' => $edit_id, 'name' => $name, 'email' => $email, 'works_id' => $body, 'created_at' => $edit_data['created_at'], 'updated_at' => $edit_data['updated_at'], 'delete_flag' => $edit_delete_flag ); $back_url = "location.href='/home'"; return view('edit',['User' => $edit, 'Back' => $back_url]) -> withErrors($validator); //エラー時の処理 } //バリデーションが通った時の処理 } }まるでひとつのコントローラーの処理のようになっているが、このような書き方もできる。
view()
を指定した書き方によって、GET
メソッド以外による情報を保持してのページ遷移が可能となった。エラー時における入力値の保持
redirect()
以外によるページ遷移と値の保持の仕方を紹介したが、ならredirect()
の際はどうやって値を保持すれば良いのか。
withInput()
を使用するのも一つの手だが、Laravel
ではoldヘルパというものが使用できる。
使い方は~.blade.php
の<Input>
などのvalue
に{{ old('name属性') }}
を記入するだけ。また、oldヘルパでは初期値も設定できる。
データベースの値を初期値にしたい場合は第二引数にその値を設定する。sample.blade.php<td><input type="text" name="edit_text" value="{{ old('edit_text', $db->text) }}" ></td>参考文献
- 投稿日:2020-09-09T18:40:42+09:00
Laravelメモ
メモ。なんかあり次第追記していきます。
scout#paginateで特定のpageを指定
- 第三引数にページを指定する。eloquent#paginateとは違ってcolumnsは取らない。
- https://github.com/laravel/scout/blob/e168e5cf3e26372bcfe770e01577903a6fa05077/src/Builder.php#L262
<?php SearchableModel::search('hoge')->paginate(15, 'page', 2); // 2ページ目を指定
- 投稿日:2020-09-09T14:35:37+09:00
Laravel8 で BindingResolutionException Target class [TestController] does not existが出力
Laravel8でコントローラーを作成しLaravel7で作成していた時と同じ感じで
下記のようにルーティングを記載しroute:listをしたところBindingResolutionExceptionが発生web.php<?php use Illuminate\Support\Facades\Route; Route::get('test','TestController@index');ドキュメント読むと下記のように修正すればOKでした
web.php<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\TestController; //Route::get('test','TestController@index'); Route::get("test", [TestController::class, 'index']); //Resourceの書き方も変わった? // Route::resource('test', 'TestController', ['only' => ['index', 'show','update', 'store', 'destroy']]); Route::resource('test', TestGroupController::class)->only([ 'index', 'show','update', 'store', 'destroy' ]);原因はRouteServiceProviderからデフォルトnamespaceが削除されたから何ですかね?
詳しい方教えてください。
- 投稿日:2020-09-09T13:18:31+09:00
Laravel MySQL 既存カラムのNULL許容とデフォルト値をNULLに設定する
目的
- LaravelとMySQLの組み合わせで「カラムへのNULL格納を許容する」と「デフォルト値をNULLに設定する」方法をまとめる。
実施環境
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.5) ハードウェア MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) プロセッサ 2GHzクアッドコアIntel Core i5 メモリ 32 GB 3733 MHz LPDDR4 グラフィックス Intel Iris Plus Graphics 1536 MB
- ソフトウェア環境
項目 情報 備考 PHPバージョン 7.4.3 Homwbrewを用いて導入 Laravelバージョン 7.0.8 commposerを用いてこちらの方法で導入→Mac Laravelの環境構築を行う MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いてこちらの方法で導入→Mac HomebrewでMySQLをインストールする 前提条件
- マイグレーションをすることができる状態のLaravelアプリが存在していること。
前提情報
- 本記事では都合上、マイグレーションファイルのカラムに変更を与える処理のみ記載する。
- 本来はマイグレーションファイルの作成、マイグレーションファイルの記載、マイグレーションなどの作業が必要である。
例
- 下記の内容をマイグレーションファイルのupに記載する必要がある。
- マイグレーション後から現在の状態に戻すためのdownの処理も記載する必要がある。
- nullの許容設定のマイグレーションファイルへの記載文を下記に記載する。
// nullを許容したい時 $table->カラムタイプ('カラム名')->nullable()->change(); // nullを許容しない時 $table->カラムタイプ('カラム名')->nullable(false)->change();
- デフォルト値null設定のマイグレーションファイルへの記載文を下記に記載する。
$table->カラムタイプ('カラム名')->default(null)->change();参考文献
- 投稿日:2020-09-09T08:49:16+09:00
Laravel8~Newログインまたも変更あり~Memo
Laravle8のLoginがどうなってるか確認してみる
みなさんこんにちは
ジーズアカデミー 主席講師 山崎ですm(_ _)m
今回はLaravel8にアップデートされLogin画面作成のMemoをしておきます。前提条件/検証環境
- LaravelでCRUDを作成した経験がある人
- Laravelの基本を理解している人
- 記事内容的には、Laravel8のAuthを使う場合の自分メモです。
- Laravel8
- PHP 7.3.x(確認した環境)
- EC2の場合:t2.small (メモリ2G以上必要 "laravel/jetstream"に必要なため,t2.microだとコケます)
- Node.js インストール済みであること
【 Laravel6/7でのログイン画面作成はこちらをご参考に】
https://qiita.com/daisu_yamazaki/items/a914a16ca1640334d7a5
Laravel8 ログイン画面作成
1. laravel/jetstreamをインストール
幾つかの種類があるようです、時間的に今回は簡単なものを選択!!
ターミナルcomposer require laravel/jetstream php artisan jetstream:install livewire php artisan migrate #vue使う場合には以下も必要 npm install npm run devなんか、すごくなってる。。。
まずは Laravel8バージョンのLOGINが実装できました!
Loginのところも「幾つかの選択肢」があるようなので、これも後で調べていこうと思います。
いやー、インストールはサクサク感が出た気がします(個人の感想)。
Login後の機能が拡張されてるので、これから触って調べていこうと思います。
凄いですね~ワクワクします!!
※朝30分でメモったので、間違ってたらごめんなさいm(_ _)mもう一つのLoginは??※現在検証中
ターミナルcomposer require laravel/jetstream php artisan jetstream:install inertia npm install npm run devLaravel8.x 公式
https://laravel.com/docs/8.x/frontend#introduction
「Laravel DB.com」も運用中
Laravelをテーブル設計するだけでMigrationも生成できるツール
https://qiita.com/daisu_yamazaki/items/4e13ac43c20bcdedeb40以上
- 投稿日:2020-09-09T08:49:16+09:00
Laravel8 ~New Login まで早速試してみた~
Laravel8 ~New Login まで早速試してみた~
みなさんこんにちは
ジーズアカデミー 主席講師 山崎ですm(_ _)m
今回はLaravel8にアップデートされLogin画面作成のMyMemoをしておきます。以下がLaravel8インストール完了時の画面です。変わってる・・・。
前提条件/検証環境
- Laravelを基本を理解してCRUDを作成した経験がある人
- 記事内容的には、Laravel8のLoginを使う場合の自分メモです。
- PHP 7.3.x(確認した環境)
- EC2の場合:t2.small (メモリ2G以上必要 "laravel/jetstream"に必要なため,t2.microだとコケます。Swapで対応できる方はそれでもOK)
- Node.js インストール済みであること
【 Laravel6/7でのログイン画面作成はこちらをご参考に】
https://qiita.com/daisu_yamazaki/items/a914a16ca1640334d7a5
Laravel8 ログイン画面作成
1. laravel/jetstreamをインストール
幾つかの種類があるようです、時間的に今回は簡単なものを選択!!
ターミナルcomposer require laravel/jetstream php artisan jetstream:install livewire php artisan migrate npm install npm run dev上記コマンドの2回目は「Livewire」or「inertiajs」を選択します。
どちらも目新しい。ターミナル#https://laravel-livewire.com/ php artisan jetstream:install livewire #https://inertiajs.com/ php artisan jetstream:install inertia「Livewireは(Bladeインクルードのように)最初のコンポーネント出力をページとともにレンダリングします。...インタラクションが発生すると、Livewireは更新されたデータを使用してサーバーにAJAXリクエストを送信します。」とサイトの説明を見る感じでは、Bladeテンプレート側の記述だけでJavaScriptを生成するようなイメージでしょうか。
「Inertiaにはクライアント側ルーティングがなく、APIも必要ありません。いつものように、コントローラーとページビューを構築するだけ」と「クライアント側とサーバー側の2つを接続する接着剤と考えてください」って感じで書いてますね。フロント側をvue/React/Svelte ...構築する場合にはこちらですね。
ダッシュボード
プロフィールページ??
なんか、すごくなってる。。。
まずは Laravel8バージョンのLOGINが実装できました!
Loginのところも「幾つかの選択肢」があるようなので、これも後で調べていこうと思います。
いやー、インストールはサクサク感が出た気がします(個人の感想)。
Login後の機能が拡張されてるので、これから触って調べていこうと思います。
凄いですね~ワクワクします!!
※朝30分でメモったので、間違ってたらごめんなさいm(_ _)m
※先程、確認したら、すでに同様の記事を上げてらっしゃる人が多数いました。。速い人は本当に速い。アウトプットが重要ですからね。これでいいんです。Laravel8.x 公式
https://laravel.com/docs/8.x/frontend#introduction
「Laravel DB.com」も運用中
Laravelをテーブル設計するだけでMigrationも生成できるツール
https://qiita.com/daisu_yamazaki/items/4e13ac43c20bcdedeb40以上
- 投稿日:2020-09-09T08:49:16+09:00
Laravel8 : 新ログイン「jetstream」を早速試してみたメモ
Laravel8 : 新ログイン「jetstream」を早速試してみたメモ
みなさんこんにちは
ジーズアカデミー 主席講師 山崎ですm(_ _)m
今回はLaravel8にアップデートされLogin画面作成のMyMemoをしておきます。以下がLaravel8インストール完了時の画面です。変わってる・・・。
前提条件/検証環境
- Laravelを基本を理解してCRUDを作成した経験がある人
- 記事内容的には、Laravel8のLoginを使う場合の自分メモです。
- PHP 7.3.x(確認した環境)
- EC2の場合:t2.small (メモリ2G以上必要 "laravel/jetstream"に必要なため,t2.microだとコケます。Swapで対応できる方はそれでもOK)
- Node.js インストール済みであること
【 Laravel6/7でのログイン画面作成はこちらをご参考に】
https://qiita.com/daisu_yamazaki/items/a914a16ca1640334d7a5
Laravel8 ログイン画面作成
1. laravel/jetstreamをインストール
幾つかの種類があるようです、時間的に今回は簡単なものを選択!!
ターミナルcomposer require laravel/jetstream php artisan jetstream:install livewire php artisan migrate npm install npm run dev上記コマンドの2回目は「Livewire」or「inertiajs」を選択します。
どちらも目新しい。ターミナル#https://laravel-livewire.com/ php artisan jetstream:install livewire #https://inertiajs.com/ php artisan jetstream:install inertia「Livewireは(Bladeインクルードのように)最初のコンポーネント出力をページとともにレンダリングします。...インタラクションが発生すると、Livewireは更新されたデータを使用してサーバーにAJAXリクエストを送信します。」とサイトの説明を見る感じでは、Bladeテンプレート側の記述だけでJavaScript(ajax,event...)を生成するようなイメージでしょうか。
[livewireの動画解説も用意されています]
https://laravel-livewire.com/screencasts/installation「Inertiaにはクライアント側ルーティングがなく、APIも必要ありません。いつものように、コントローラーとページビューを構築するだけ」と「クライアント側とサーバー側の2つを接続する接着剤と考えてください」って感じで書いてますね。フロント側をvue/React/Svelte ...構築する場合にはこちらですね。
ダッシュボード
プロフィールページ??
なんか、すごくなってる。。。
まずは Laravel8バージョンのLOGINが実装できました!
Loginのところも「幾つかの選択肢」があるようなので、これも後で調べていこうと思います。
いやー、インストールはサクサク感が出た気がします(個人の感想)。
Login後の機能が拡張されてるので、これから触って調べていこうと思います。
凄いですね~ワクワクします!!
※朝30分でメモったので、間違ってたらごめんなさいm(_ _)m
※先程、確認したら、すでに同様の記事を上げてらっしゃる人が多数いました。。速い人は本当に速い。アウトプットが重要ですからね。これでいいんです。Laravel8.x 公式
https://laravel.com/docs/8.x/frontend#introduction
「Laravel DB.com」も運用中
Laravelをテーブル設計するだけでMigrationも生成できるツール
https://qiita.com/daisu_yamazaki/items/4e13ac43c20bcdedeb40以上
- 投稿日:2020-09-09T08:49:16+09:00
Laravel8 : 新ログイン「jetstream」を早速試してみた
Laravel8 : 新ログイン「jetstream」を早速試してみた
みなさんこんにちは
ジーズアカデミー 主席講師 山崎ですm(_ _)m
今回はLaravel8にアップデートされLogin画面作成のMyMemoをしておきます。以下がLaravel8インストール完了時の画面です。変わってる・・・。
前提条件/検証環境
- Laravelを基本を理解してCRUDを作成した経験がある人
- 記事内容的には、Laravel8のLoginを使う場合の自分メモです。
- PHP 7.3.x(確認した環境)
- EC2の場合:t2.small (メモリ2G以上必要 "laravel/jetstream"に必要なため,t2.microだとコケます。Swapで対応できる方はそれでもOK)
- Node.js インストール済みであること
【 Laravel6/7でのログイン画面作成はこちらをご参考に】
https://qiita.com/daisu_yamazaki/items/a914a16ca1640334d7a5
Laravel8 ログイン画面作成
1. laravel/jetstreamをインストール
幾つかの種類があるようです、時間的に今回は簡単なものを選択!!
ターミナルcomposer require laravel/jetstream php artisan jetstream:install livewire php artisan migrate npm install npm run dev上記コマンドの2回目は「Livewire」or「inertiajs」を選択します。
どちらも目新しい。ターミナル#https://laravel-livewire.com/ php artisan jetstream:install livewire #https://inertiajs.com/ php artisan jetstream:install inertia「Livewireは(Bladeインクルードのように)最初のコンポーネント出力をページとともにレンダリングします。...インタラクションが発生すると、Livewireは更新されたデータを使用してサーバーにAJAXリクエストを送信します。」とサイトの説明を見る感じでは、Bladeテンプレート側の記述だけでJavaScriptを生成するようなイメージでしょうか。
「Inertiaにはクライアント側ルーティングがなく、APIも必要ありません。いつものように、コントローラーとページビューを構築するだけ」と「クライアント側とサーバー側の2つを接続する接着剤と考えてください」って感じで書いてますね。フロント側をvue/React/Svelte ...構築する場合にはこちらですね。
ダッシュボード
プロフィールページ??
なんか、すごくなってる。。。
まずは Laravel8バージョンのLOGINが実装できました!
Loginのところも「幾つかの選択肢」があるようなので、これも後で調べていこうと思います。
いやー、インストールはサクサク感が出た気がします(個人の感想)。
Login後の機能が拡張されてるので、これから触って調べていこうと思います。
凄いですね~ワクワクします!!
※朝30分でメモったので、間違ってたらごめんなさいm(_ _)m
※先程、確認したら、すでに同様の記事を上げてらっしゃる人が多数いました。。速い人は本当に速い。アウトプットが重要ですからね。これでいいんです。Laravel8.x 公式
https://laravel.com/docs/8.x/frontend#introduction
「Laravel DB.com」も運用中
Laravelをテーブル設計するだけでMigrationも生成できるツール
https://qiita.com/daisu_yamazaki/items/4e13ac43c20bcdedeb40以上
- 投稿日:2020-09-09T01:18:17+09:00
laravelのバージョンアップを経験して
はじめに
当方、フリーでPHPエンジニアをやっています。
最近Laravelのvar5.2からvar6にバージョンアップするプロジェクトに携わる機会があり、そこで得た経験を大雑把ではありますが、まとめてみました。
これからバージョンアップを計画している方に少しでも参考になれば幸いです!尚、テストコードの実装があまりさせていない環境でのバージョンアップでしたが、ちゃんとテストコードを書いている場合は、テスト回して確認する事をおすすめします!
基本的には公開されているアップデートガイドを見て進めるのが良いです。
確認する事
- サーバー
- laravelのドキュメント、サーバー要件を確認
- mysql
- バージョン確認する
- PHP
- バージョン確認する
- PHPライブラリ
- バージョンアップ後も動くか確認。ライブラリのバージョンを上げなければいけない時、既存のシステムが正常に動くか確認
- ライブラリによってLaravelのバージョンアップ後、サポートしてない可能性もある為、注意が必要
- laravelのヘルパー関数
- 飛び級のバージョンアップ時はだいぶ内容も変わっているので使っている際は注意が必要
- collection
- メソッドの内容の変更、廃止されたメソッドなど
- Eloquent クエリビルダ
- Eloquentの方が採用率は高いかもしれませんが、混合で使用していたりする場合は両方注意が必要
- jobs failed_jobsテーブルの変更
- 5.3からjobsとfailed_jobsのテーブル構成に変更が入っています
- Laravel Mix
- css、jsの圧縮をされている際はバージョン確認
- セッション
- 5.3からコンストラクタでセッションにアクセスできなくなってます
- インスタンス化
- 今はDIを使っている所も多いかと思いますが、appでインスタンス化していて変数を渡している場合、キーを指定して渡して上げないとエラーになります
- Log
- 飛び級のバージョンアップの場合、機能も充実して設定方法も変わっているので、注意が必要。slack等にエラーログ飛ばしている場合など。
- vender配下をオーバーライドしている場合
- 私が携わったプロジェクトで一番ネックだった所です。あまりしないかもしれませんが、セッションやauth 、その他vender配下のメソッドをオーバーライドして独自に処理を加えている場合、基本的に機能しないと考えておいた方が良いです。
プロジェクトによってはまだまだ確認する所もあるかと思いますが、システムを良く理解している方と相談して進めていくと良いです!
バージョンアッププロジェクトを走らせる前に
注意事項をリストアップしておくと良いです。
例えば、PHPのバージョンアップが必要でPHP関数を普段良く使っている場合、非推奨になっている関数等ありますので、そういったリストと、修正内容を統一するために、補填としてどういった対応が必要か残しておくとチームとして動きやすくなります。また、必要作業もリストアップしておくのをおすすめします。
最後に
テストコードを普段から書いておくとバージョンアップも楽です
!
- 投稿日:2020-09-09T00:54:07+09:00
Laravel 8 リリース!
2020年9月8日 Laravel 8 がリリースされました?
Laravel Jetstream、モデルディレクトリ、モデルファクトリー、マイグレーションスカッシング、レート制限の改善、時間テストヘルパー、動的ブレードコンポーネント等多くの新機能が追加されています。
Laravel 8 はLTSではありません。バグ修正は2021年3月8日、セキュリティ修正は2021年7月8日までのサポートになるのでご注意ください。Laravel 8 の新機能
https://laravel-news.com/laravel8
(ニュース記事の内容をほぼグーグル翻訳したものです。)
Laravel Jetstream
https://github.com/laravel/jetstream
[Laravel Jetstreamは、以前のバージョンにあった既存のLaravel UI足場を改善します。
ログイン、登録、メール検証、2要素認証、セッション管理、LaravelによるAPIサポート、チーム管理など、新しいプロジェクトの出発点となります。モデルディレクトリ
Laravel 8のアプリケーションのデフォルトでは
app/Models
ディレクトリが含まれています。
すべてのジェネレータコマンドは、モデルがapp/Models
に存在することを前提としています。
ただし、app/Models
ディレクトリが存在しない場合は、app
ディレクトリ内にモデルを保持していると想定します。モデルファクトリクラス
Eloquentモデルファクトリは、Laravel 8からクラスベースになり、ファクトリ間の関係のサポートが改善されました。
新しく改善されたモデルファクトリを介してレコードを生成するための新しい構文がいかに素晴らしいかについて、あなたは賛同するでしょう。use App\Models\User; User::factory()->count(50)->create(); // using a model state "suspended" defined within the factory class User::factory()->count(5)->suspended()->create();マイグレーションスカッシュ
アプリケーションに多くのマイグレーションファイルが含まれている場合は、それらを1つのSQLファイルに圧縮できます。
このファイルは、マイグレーションの実行時に最初に実行され、その後、残りのマイグレーションファイルが実行されます。
既存のマイグレーションを潰すことで、マイグレーションファイルの膨張を減らし、テスト実行中のパフォーマンスを向上させることができます。レート制限の改善
Laravel 8は、既存のスロットルミドルウェアとの下位互換性をサポートし、はるかに高い柔軟性を提供しながら既存のレート制限機能を改善します。
Laravel 8には、ファサードを介して定義できるレートリミッターの概念があります。use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Support\Facades\RateLimiter; RateLimiter::for('global', function (Request $request) { return Limit::perMinute(1000); });ご覧のとおり、この
for()
メソッドはHTTPリクエストインスタンスを取得するため、リクエストを動的に制限することを完全に制御できます。時間テストヘルパー
Laravelユーザーは、優れたCarbon PHPライブラリを介して、時間の変更を完全に制御できました。Laravel 8は、テスト内の時間を操作するための便利なテストヘルパーを提供することで、この一歩をさらに前進させます。
// Travel into the future... $this->travel(5)->milliseconds(); $this->travel(5)->seconds(); $this->travel(5)->minutes(); $this->travel(5)->hours(); $this->travel(5)->days(); $this->travel(5)->weeks(); $this->travel(5)->years(); // Travel into the past... $this->travel(-5)->hours(); // Travel to an exact time... $this->travelTo(now()->subHours(6)); // Return back to the present time... $this->travelBack();これらの方法を使用すると、各テストの間に時間がリセットされます。
動的ブレードコンポーネント
実行時にブレードコンポーネントを動的にレンダリングする必要がある場合があります。
Laravel 8には、<x-dynamic-component/>
コンポーネントをレンダリングするための用意がされています。<x-dynamic-component :component="$componentName" class="mt-4" />Laravel 8の詳細
これらはLaravel 8の新機能のほんの一部であり、完全なリストを確認するには、Laravel 8リリースノートとアップグレードガイドを確認してください。また、簡単な更新方法が必要な場合は、Laravel Shiftを忘れないでください。
- 投稿日:2020-09-09T00:54:07+09:00
Laravel 8 Release !
2020年9月8日 Laravel 8 がリリースされました?
Laravel Jetstream、モデルディレクトリ、モデルファクトリー、マイグレーションスカッシング、レート制限の改善、時間テストヘルパー、動的ブレードコンポーネント等多くの新機能が追加されています。
Laravel 8 はLTSではありません。バグ修正は2021年3月8日、セキュリティ修正は2021年7月8日までのサポートになるのでご注意ください。Laravel 8 の新機能
https://laravel-news.com/laravel8
(ニュース記事の内容をほぼグーグル翻訳したものです。)
Laravel Jetstream
https://github.com/laravel/jetstream
[Laravel Jetstreamは、以前のバージョンにあった既存のLaravel UI足場を改善します。
ログイン、登録、メール検証、2要素認証、セッション管理、LaravelによるAPIサポート、チーム管理など、新しいプロジェクトの出発点となります。モデルディレクトリ
Laravel 8のアプリケーションのデフォルトでは
app/Models
ディレクトリが含まれています。
すべてのジェネレータコマンドは、モデルがapp/Models
に存在することを前提としています。
ただし、app/Models
ディレクトリが存在しない場合は、app
ディレクトリ内にモデルを保持していると想定します。モデルファクトリクラス
Eloquentモデルファクトリは、Laravel 8からクラスベースになり、ファクトリ間の関係のサポートが改善されました。
新しく改善されたモデルファクトリを介してレコードを生成するための新しい構文がいかに素晴らしいかについて、あなたは賛同するでしょう。use App\Models\User; User::factory()->count(50)->create(); // using a model state "suspended" defined within the factory class User::factory()->count(5)->suspended()->create();マイグレーションスカッシュ
アプリケーションに多くのマイグレーションファイルが含まれている場合は、それらを1つのSQLファイルに圧縮できます。
このファイルは、マイグレーションの実行時に最初に実行され、その後、残りのマイグレーションファイルが実行されます。
既存のマイグレーションを潰すことで、マイグレーションファイルの膨張を減らし、テスト実行中のパフォーマンスを向上させることができます。レート制限の改善
Laravel 8は、既存のスロットルミドルウェアとの下位互換性をサポートし、はるかに高い柔軟性を提供しながら既存のレート制限機能を改善します。
Laravel 8には、ファサードを介して定義できるレートリミッターの概念があります。use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Support\Facades\RateLimiter; RateLimiter::for('global', function (Request $request) { return Limit::perMinute(1000); });ご覧のとおり、この
for()
メソッドはHTTPリクエストインスタンスを取得するため、リクエストを動的に制限することを完全に制御できます。時間テストヘルパー
Laravelユーザーは、優れたCarbon PHPライブラリを介して、時間の変更を完全に制御できました。Laravel 8は、テスト内の時間を操作するための便利なテストヘルパーを提供することで、この一歩をさらに前進させます。
// Travel into the future... $this->travel(5)->milliseconds(); $this->travel(5)->seconds(); $this->travel(5)->minutes(); $this->travel(5)->hours(); $this->travel(5)->days(); $this->travel(5)->weeks(); $this->travel(5)->years(); // Travel into the past... $this->travel(-5)->hours(); // Travel to an exact time... $this->travelTo(now()->subHours(6)); // Return back to the present time... $this->travelBack();これらの方法を使用すると、各テストの間に時間がリセットされます。
動的ブレードコンポーネント
実行時にブレードコンポーネントを動的にレンダリングする必要がある場合があります。
Laravel 8には、<x-dynamic-component/>
コンポーネントをレンダリングするための用意がされています。<x-dynamic-component :component="$componentName" class="mt-4" />Laravel 8の詳細
これらはLaravel 8の新機能のほんの一部であり、完全なリストを確認するには、Laravel 8リリースノートとアップグレードガイドを確認してください。また、簡単な更新方法が必要な場合は、Laravel Shiftを忘れないでください。