- 投稿日:2020-03-22T23:43:45+09:00
Laravel 6.Xで新しくなったログイン認証を導入した話
こちらは、
KPI 項目B:「Laravelの勉強をする」
のアウトプット記事です。本編
今回はLarave 6.0で新しくなった認証機能を試しました。
準備
Laradockで環境の用意。
今回は以下の環境。
パッケージ バージョン Ubuntu 16.04.6 PHP 7.3.15 PostgreSQL 9.6.17 Laravel 7.2.2 Node.jsのインストール
Dockerのコンテナ内で
npm
が使えるようにNode.jsをインストールします。Laradockの環境設定を変更し
.envWORKSPACE_INSTALL_NODE=true # DockerへNode.jsをインストールする。コンテナの再ビルド
docker-compose build stop docker-compose build workspace docker-compose up -d --build workspace認証機能のコマンド実行
何はともあれ
Workspace
コンテナへログイン。docker-compose exec --user=laradock workspace bash先にUsersテーブルのマイグレーション。
php artisan migrate:refresh --seed
composerを使って、
laravel/ui
ライブラリをインストール後、Artisanコマンドを実行。composer require laravel/ui php artisan ui vue --auth
NPMでモジュールのインストール
npm install npm run dev
登録画面
ベースデザインは以前と変わらないよう。
SCSSやVUEといった要素が使われるようになっていた。参考
- 投稿日:2020-03-22T23:36:54+09:00
【Laravel】投稿日時を「X秒前」「X分前」「X時間前」というように相対表示させたい
はじめに
TwitterなどのSNSのように投稿日時が下記のように相対表示するように、日時を変換する処理を記述していたのですが、Carbonライブラリでは既に
diffForFumans()メソッド
が用意されていたので、ご紹介します。0秒 ≦ X < 60秒 の場合 => 「X秒前」 60秒 ≦ X < 3600秒 の場合 => 「X分前」 3600秒 ≦ X < 86400秒 => 「X時間前」 86400秒 ≦ X < 604800秒 => 「X日前」 604800秒 ≦ X < 2764800秒 => 「X週間前」 2764800秒 ≦ X < 31536000秒 => 「Xケ月前」 31536000秒 ≦ X => 「X年前」実装
$content->created_at->diffForHumans();最後に
以上です。
プライベート関数でcreated_atを引数にとって、条件分岐で経過時間を相対表示できるように処理を記述していたのですが、diffForFumans()
で代用できるなんて便利ですね!!他にも色々とカスタマイズできるので、詳しくは公式ドキュメントを確認してみてください。
- 投稿日:2020-03-22T22:51:41+09:00
laravel 7.xでmake:authの代わりに打つコマンド
- 投稿日:2020-03-22T22:48:01+09:00
Laravelのbladeにて、多重のforeachを使って複数の配列を元にhtmlを表示する
実現したいこと
例えば不動産システムを例にした時に、複数の配列の情報を元に、
「物件情報のjsonを参考にリストで表示し、isLivedがtrueのものだけ 背景の色をグレーにしたい」
に近いことがしたいと思った時、$loopがとても便利だったのでメモ。sample.json"price": [{ "place_1": 60000, "place_2": 85000, "place_3": 90000, "place_4": 80000, "place_5": 80000, "place_6": 100000 }], "isLived": [{ "place_1": null, "place_2": null, "place_3": null, "place_4": null, "place_5": null, "place_6": true }]実装例
sample.blade.php@foreach ( $sample['rental_apartments'] as $rental_apartment ) <div class="h40 w-100 border"> <div class="d-flex flex-wrap"> @foreach ($rental_apartment["isLived"][0] as $rental_apartment_isLived) @if ($rental_apartment_isLived !== null) <div class="bg-grey"> @foreach ($rental_apartment["depth"][0] as $rental_apartment_price ) @if ($loop->parent->index === $loop->index) {{ $rental_apartment_price }} @endif @endforeach </div> @elseif($rental_apartment_isLived === true) <div> @foreach ($rental_apartment["price"][0] as $rental_apartment_price ) @if ($loop->parent->index === $loop->index) {{ $rental_apartment_price }} @endif @endforeach </div> @endif @endforeach </div> </div> @endforeachアプローチとしては、
多重のforeachの中で、
$loop->parent->index === $loop->index
を突き合わせることで、同じ順番の要素の時だけが判定されるようにしている。
そもそもjson構造はこうあるべきでないとか、書き方が冗長なんじゃないかとか、、もっとループの計算量は少なくできるんじゃないかとか、色々と余地がありそうだが一旦公開してみる。
参考記事
- 投稿日:2020-03-22T19:42:01+09:00
Laravel セッションを使って一時的に値を保存しよう!
目的
- Larvelでセッションを使う方法は理解したらとても便利だったため忘れない様にまとめる
- DBは使用せずとにかくセッションを開く部分だけを紹介する
考え方
- 「値に名前をつけて保存する」と「値が必要な時に名前を指定して取得する」の処理を利用するだ毛である。
- 各クライアントのセッションIDという物と値の名前がそれぞれリンクして保存される。(これは値保存の概念として知っておいて欲しいが、セッションIDがクライアントに勝手に割り振られるため知らなくても実装できる)
書き方の例
値に名前をつけて保存する方法を下記に記載する。
session()->put('セッションに入れる値の名前', セッションに入れる値);セッションに入れた値を取り出す方法を下記に記載する。
取り出した値を格納する変数 = session()->get('セッションに入れた値の名前')より具体的な例
- 「Hello world」という文字列のセッションに入れてみる。
- セッションに入れる際の値につける名前は
str
とする。- セッションから値を受け取る時に格納する変数は
$out_put
とする。任意のコントローラに下記を記載する。
session()->put('str', 'Hello world');別のコントローラに下記を記載する。
$out_put = session()->get('str');上記の実行後、
$out_put
には文字列「Hello world」が入っている。
- コントローラの変数をビューで表示する方法はこちら
- 投稿日:2020-03-22T19:01:59+09:00
Laravel リレーションの取得 withメソッド
withでeagerloadする
紐づいたテーブルから大量にデータ取得する場合、何度もDBアクセスしてデータを取得するとレスポンスがわるくなるので、リレーションを取得するときはwithを使う。
使い方
下記のようにするとwithメソッドが利用可能
Model::with('リレーション名')->get();実際の例
1対多の関係(Personが複数のBoardを持っている)
親:person
・[id, name, email, age]
子:Board
・[id, person_id, title, message]
withを使うと下記のような流れで値を取得できる。
※hasMany, belongsTo等、正しく設定されていること前提
①Boardだけを取得
②取得したBoardのperson_idの値をまとめ、それらのIDのPersonを取得Board.php$boards = Board::with('person')->get(); return view('boards.index', ['boards' => $boards])Boards/index.blade.php# こうすると親の値も取得できる @foreach($boards as $board) <p>{{ $board->message }}</p> <p>{{ $board->person->name }}</p> @endforeach上記は子から親を取得しているが、これの逆パターンをすれば親から子の取得も可能
- 投稿日:2020-03-22T17:16:01+09:00
Laravel7 消えたpassword_resetsテーブルを追え
Laravel7がリリースされまして初記事です。
事件発生
事件はLaravel7をインストールした時、起こりました。
$ composer create-project --prefer-dist laravel/laravel . $ php artisan -V Laravel Framework 7.2.2 $ ls -1 ./database/migrations 2014_10_12_000000_create_users_table.php 2019_08_19_000000_create_failed_jobs_table.php
password_resets
ファアイルが消えた...!?失踪したファイル
ファイルが削除されてしまっていた...!
転がり込んだファイル
laravel/ui ライブラリに移動されました。
検証
laravel/ui インストール
$ composer require laravel/ui $ composer show laravel/ui name : laravel/ui descrip. : Laravel UI utilities and presets. keywords : laravel, ui versions : * v2.0.1 type : library license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText source : [git] https://github.com/laravel/ui.git 47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83 dist : [zip] https://api.github.com/repos/laravel/ui/zipball/47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83 47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83 path : /work/vendor/laravel/ui names : laravel/ui$ php artisan ui vue --auth $ ls -1 ./database/migrations 2014_10_12_000000_create_users_table.php 2014_10_12_100000_create_password_resets_table.php 2019_08_19_000000_create_failed_jobs_table.php
--auth
オプションを付けて実行した際に認証系のファイルが生成されますが、その際に2014_10_12_100000_create_password_resets_table.php
ファイルも生成されました。謎はすべて解けた!
補足
ui vue で生成されるファイル一覧
$ php artisan ui vuepackage.json resources/js/app.js resources/js/bootstrap.js resources/js/components/ExampleComponent.vue resources/sass/_variables.scss resources/sass/app.scss webpack.mix.jsui vue --auth で生成されるファイル一覧
$ php artisan ui vue --authapp/Http/Controllers/Auth/ConfirmPasswordController.php app/Http/Controllers/Auth/ForgotPasswordController.php app/Http/Controllers/Auth/LoginController.php app/Http/Controllers/Auth/RegisterController.php app/Http/Controllers/Auth/ResetPasswordController.php app/Http/Controllers/Auth/VerificationController.php app/Http/Controllers/HomeController.php database/migrations/2014_10_12_100000_create_password_resets_table.php resources/views/auth/login.blade.php resources/views/auth/passwords/confirm.blade.php resources/views/auth/passwords/email.blade.php resources/views/auth/passwords/reset.blade.php resources/views/auth/register.blade.php resources/views/auth/verify.blade.php resources/views/home.blade.php resources/views/layouts/app.blade.php routes/web.php
- 投稿日:2020-03-22T17:16:01+09:00
Laravel7 password_resetsテーブルはどこに消えた?
Laravel7がリリースされまして初記事です。
事件発生
事件はLaravel7をインストールした時、起こりました。
$ composer create-project --prefer-dist laravel/laravel . $ php artisan -V Laravel Framework 7.2.2 $ ls -1 ./database/migrations 2014_10_12_000000_create_users_table.php 2019_08_19_000000_create_failed_jobs_table.php
password_resets
ファアイルが消えた...!?失踪したファイル
ファイルが削除されてしまっていた...!
転がり込んだファイル
laravel/ui ライブラリに移動されました。
検証
laravel/ui インストール
$ composer require laravel/ui $ composer show laravel/ui name : laravel/ui descrip. : Laravel UI utilities and presets. keywords : laravel, ui versions : * v2.0.1 type : library license : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText source : [git] https://github.com/laravel/ui.git 47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83 dist : [zip] https://api.github.com/repos/laravel/ui/zipball/47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83 47a0a1dac76f5e73803c86e1f38b2c7e0ae7fa83 path : /work/vendor/laravel/ui names : laravel/ui$ php artisan ui vue --auth $ ls -1 ./database/migrations 2014_10_12_000000_create_users_table.php 2014_10_12_100000_create_password_resets_table.php 2019_08_19_000000_create_failed_jobs_table.php
--auth
オプションを付けて実行した際に認証系のファイルが生成されますが、その際に2014_10_12_100000_create_password_resets_table.php
ファイルも生成されました。謎はすべて解けた!
補足
ui vue で生成されるファイル一覧
$ php artisan ui vuepackage.json resources/js/app.js resources/js/bootstrap.js resources/js/components/ExampleComponent.vue resources/sass/_variables.scss resources/sass/app.scss webpack.mix.jsui vue --auth で生成されるファイル一覧
$ php artisan ui vue --authapp/Http/Controllers/Auth/ConfirmPasswordController.php app/Http/Controllers/Auth/ForgotPasswordController.php app/Http/Controllers/Auth/LoginController.php app/Http/Controllers/Auth/RegisterController.php app/Http/Controllers/Auth/ResetPasswordController.php app/Http/Controllers/Auth/VerificationController.php app/Http/Controllers/HomeController.php database/migrations/2014_10_12_100000_create_password_resets_table.php resources/views/auth/login.blade.php resources/views/auth/passwords/confirm.blade.php resources/views/auth/passwords/email.blade.php resources/views/auth/passwords/reset.blade.php resources/views/auth/register.blade.php resources/views/auth/verify.blade.php resources/views/home.blade.php resources/views/layouts/app.blade.php routes/web.php
- 投稿日:2020-03-22T16:58:48+09:00
laravel-ide-helperの"Str"と"Arr"がphpstormでコード補完されない
起きたこと
laravel-ide-helperを入れてvscodeで開発していたが、気分でphpstormに切り替えたら全然コード補完してくれない。phpstormでも使いたいので直し方を記す。拡張機能はそれぞれ、vscodeにintelephense、phpstormにはlaravelくらいしか入れていない。
原因
大体の流れはこれ
Laravel added aliases for 'Arr' and 'Str' no autocomplete from helper #784
昨年2月にlaravel本体でマージされたalias追加でide-helperに不具合が生じた。対応は誰か試みたらしいがテストが通らないっぽくて放置されてる。直し方
- 投稿日:2020-03-22T02:34:05+09:00
久しぶりのvagrant upでつまづいた話
はじめに
Laravelを少し触ったことがある程度の初心者なので,ガッツリ開発をしている方々は”それって当たり前だよね?”と思うかもしれませんが,ご了承ください.
問題発生
久しぶりにLaravelを触ってみようと思い,Homesteadの設定をしていたところ,
vagrant up
させたところで…エラー/opt/vagrant/embedded/lib/ruby/2.4.0/psych.rb:377:in `parse': (<unknown>): mapping values are not allowed in this context at line 14 column 9 (Psych::SyntaxError)というエラーが発生しました.
このエラー,よく見るとrubyがどうのこうのって書いてあります.
あれ?rubyなんて使ったことないし,これLaravelの環境構築なんだけどな…原因
エラー文をググってみると,同じように困っている方がいました.
この記事によると,map:
の後に半角スペースが足りないことが原因でした.間違いfolders: - map:/Users/code to: /home/vagrant/code正しいfolders: - map: /Users/code to: /home/vagrant/codeえ?そこのスペース大事だったんだ…
と気づかされました.
map:
の後ろに半角スペースを追加したところ,無事vagrant up
が実行出来ました!参考文献