エンジニアのひよこ_level10

【毎日更新!】新卒3年目エンジニアブログです!

Laravel

【Laravel】Hasherの拡張と、info関数の実装【725日目】

Hasher github.com LaravelにはHasherという機能があります。ハッシュ化のクラスです。 バージョンアップ 5.6から、Hasherのインターフェースにinfo関数が追加されました。 クラスの拡張するなら、これも拡張したい。ってことでどう拡張するか。 元コードの…

【PHP】改行文字を<br>に変更して表示させる【721日目】

改行を使いたい 画面に文字を表示させたい。 このとき、DBなど外部から改行の入った文字が取得出来たとする こんにちは はじめまして これをHTMLとして出力するときに、 <p></p>とするとどうなるか。 <p>こんにちは はじめまして</p> HTMLの改行は意味がないので こんにち…

【Laravel】簡単にadmin用のページを作成する【720日目】

元ネタのLaravelニュース laravel-news.com 簡単admin画面作成 composer require laravel-frontend-presets/NowUi php artisan preset nowui これで、Bootstrap4で作られた、adminテンプレートが出来上がります。 php artisan migrate --seed こちらで、基本…

【Laravel6.1】LazyCollectionにeagerメソッドが追加されます【719日目】

アプデ laravel-news.com 6.0から追加された、LazyCollectionというクラスに、新しく eager()が追加されました。 どんなことが起こる? github.com @return static` なので、LazyCollectionが返されます。 そして、eagerが呼び出された時点での中身を使用し…

【Laravel】bladeの{{}}の記号を変えることができなくなりました【717日目】

今までの変更 \Blade::setContentTags('[%%', '%%]'); \Blade::setEscapedContentTags('[-%%', '%%-]'); こうすると、 {?? ??}みたいなタグを {%% %%}に置き換えたりできました。5.3まで。 用法としては、別なテンプレートエンジンや、JavaScriptで {{}}を置…

【Laravel】カスタムバリデーションで入力が空だと動かない問題【713日目】

入力が空だとバリデーションが動かない Validator::extend('required_if_xxx_and', function($attribute, $value, $parameters) { // なんらかの処理追加する // 通常のrequired_ifをする $param_required_if = implode(",", $parameters); $result_for_requ…

【PHP】PHPとLaravelのバージョンアップで苦しんだのメモ【699日目】

これはメモです ってことで、改めて後日まとめるかもしれないです。 PHP 7.0->7.1 countの引数 count関数の引数がnullを受け付けなくなりました。 nullが来た場合、配列を入れてくださいってエラーが出ます。 Laravel 5.2->5.3 Paginator.phpのpresenterが消…

【Laravel+Vue】MPAでLaravelとVueで値を共有するには?【693日目】

DBの値をVueで扱いたい <ul v-for=items> <li></li> </ul> こんな風にfor文とかでVueを使って値を回したい。 でも、Vueからデータベースの値を取ることはできない。 ということで、Laravelなどバックエンドから値をとってきて、Vueに渡してやる必要がある。 ではどうやるのがいいか。 今の…

【Laravel6】Laravel6で追加されるLazyCollectionに思いを馳せてみる【678日目】

現状一つ悩みがありました リポジトリパターンと呼ばれる、永続化したデータを取得・操作する際に、 Repositoryクラスに集約させるようなやり方があるのですが、 Eloquentのchunkメソッドを使って取得するときに、取得中に別な作業をさせようとすると、 Repo…

【Laravel】Eloquentでsaveを書くときに注意すべきこと(特に関数内で)【677日目】

Eloquent使って、saveがしたい! function saveName(\App\Models\User $user) { $user->name = "ringo"; return $user->save(); } このコード、怖い!!! なぜか? もし、$userにすでに別な値がセットされてたら? public updateUser() { $user = User::fin…

【Laravel】DBに保存時に、空文字""をnullに変換したいとき【675日目】

DBの保存に一手間追加したい フォームの入力などで取得したデータを、ちょっと変形させてからDBに保存したい。 でも、コードの途中を変更することは困難だったり(オレオレフレームワークとか)、 該当カラムは必ず変形させたいとかがあったとします。 私だと…

【Laravel】route.phpでURLに数値だけや文字だけを対象にしたい【670日目】

routeで引数に取る型を決めたい /profile/1とか、 /profile/3とかでURLを決めたい。 でも、 /profile/aaとかは404にしたい。 呼び出し先の関数で、 abort(404)とかでもいいけど、 どうせならそもそも数値だけをrouteに設定したい。 whereで固定する Route::g…

【Laravel】マイグレーションで、カラムにコメントを追加する【662日目】

DBのカラムにコメントをつけたい カラムにコメントをつけたい。 カラム名だけだと、伝わらないってときに、MySQLのカラムにコメントを付ける事ができます。 では、それをLaravelのマイグレーションでどのように実装するか coment() Schema::create('users', …

【Laravel】Laravelで簡単会員登録機能作成【657日目】

Laravelは認証機能簡単に作れます Laravelには標準機能として、認証に関わる機能が作れます。 ですが、最初のページには当然ないので、それを作成する必要があります。 php artisan make:auth 手元に新しくLaravelで作ったサイトがあれば、以下のコマンドを…

【イベント資料】Laravel.shibuya #3のLaravel Beginner IRTまとめ【648日目】

Laravel.shibuya? laravel-shibuya.connpass.com こちらのイベントですー! 私は、Laravel Beginner IRTの司会を担当していました。 イベントまとめ資料 当日話題になったのを簡単にスライドにまとめました。 Laravel shibuya 3 Laravel Beginner IRT from O…

【Laravel】すでにDBから取得したCollectionを絞り込むwhere関数【634日目】

データを絞り込みたい // データの取得 $x_item = Xitem::get(); $this->aFunc($x_item); // $x_itemの中で条件が合致したものだけ行う処理 こんなふうに、一度データベースから取得したデータの内、一部だけを利用してデータを操作したい。 このときに、ク…

【Laravel】whereIn('id', [])で全件検索されないのはなぜ?(コードリーディング)【608日目】

whereInの第二引数が空 function getUsersByIds(array $ids) { return User::whereIn('id', $ids)->get(); } こんな関数を書いたときに、$idsがもし []だったら? これでwhereが無いからって全件検索されたら、とんでもない障害に・・・ ですが、Laravelさん…

【Laravel】Requestクラスから、特定のフィールド値で配列を作るonly関数【605日目】

リクエストから、配列を作りたい $data = [ 'a' => $request->a, 'b' => $request->b, ]; こんな感じに、リクエストのキーと値がいい感じになってる連想配列が作りたい。 でも、 $request->all()みたいに、全部取りたいわけじゃない。 一部がほしいんだー!…

【Laravel】複数クエリビルダのプレースホルダの変数を合体させる【603日目】

クエリビルダのプレースホルダ?? こちらを参照 www.nyamucoro.com プレースホルダの変数を合体? User::select('*')->where('id', '=', 3); User::select('*')->where('name', '=', 'ringo'); このときの中身には、SQLだけでなく、プレースホルダに入れる…

【Laravel】クエリビルダのtoSql()とgetBindings()とは?【600日目】

クエリビルダのクエリを見たい User::select('*')->where('id', '>', 3); こんな感じのクエリビルダで、実際に走るSQLを見たい。 toSql() User::select('*')->where('id', '>', 3)->toSql(); これで、実際のSQLが見れる。 select * where id > ? あれ?この …

【Laravel】migration作成時に、tinyInteger等一部change出来ない罠【599日目】

プログラムの仕様変更が起こった ユーザのこの入力項目、必須のつもりだったけど、やっぱり必須じゃないように! という要件がやってきました。 DB側では、必須と想定して、nullableにしていなかったみたいです。 $table->tinyInteger('xxx') なるほど、では…

【Laravel】文字列をキャメルケースやスネークケースに変える関数【593日目】

文字をいい感じに書き換えたい 頻繁ではないですが、 'xxx_yyy'のように、View側でスネークケースのものを、バックエンドで受け取ったときとか、 スネークケースをキャメルケースに変えたいときがあったら? あるいは、DBのカラム名でスネークケースのものを…

【登壇レポ】Laravel.shibuya #1でLTしてきました!【572日目】

登壇したイベント laravel-shibuya.connpass.com 登壇資料 docs.google.com 登壇以外どうだった? 内容めっちゃ良かったですよ! こちらの方が上手くメモまとめてるので、是非参考に。 wand-ta.hatenablog.com ちなみに、先にIRT(机で輪っかになって討論・お…

【登壇資料】『LaravelのUser::find(1)で知るコードの読み方』【571日目】

明日LT登壇します! laravel-shibuya.connpass.com こちらの勉強会で5分LTしますー! 登壇資料 docs.google.com 内容 ■初心者 →call, callStatic関数を知る ■上級者 →ソースコードを『どこまで読み飛ばすか』という話題 スライド作成裏話 初心者より、目に見…

【Laravelネタ】なぜか、特定のページでcsrfトークンミスマッチがたくさん出る【521日目】

バグの解決依頼が来ました 今日の私のお仕事は、既存でバグが起こってるっぽいから、直して!ってお話! さあ、何が起こってるのかな〜? csrfトークンが一致しないよ IlluminateSessionTokenMismatchException なるほどなるほどー? これは、Laravelの機能…

【Laravel】Collectionの中にCollectionを入れたい【509日目】

Collectionの多重構造を作りたい Eloquentでgetすると、Collectionの中にモデルクラスとか、Collectionの中にCollectionとかがあったりする。 多重構造を作るときにはどうする? ちなみにこれが動かなくて詰まったお話。 new Collection($collection); newの…

【Laravel】valueRetrieverで、第一引数がcallbackでも文字列でも使える関数生成【502日目】

Laravelの関数見たら疑問を持ちました $sorted_user = $users->sortBy('sort_number'); $sorted_user2 = $users->sortBy(function ($user) { return $user->sort_number; }); dd($sorted_user == $sorted_user2); //true あれ?なんで、第一引数が、文字列だ…

【Laravel】dataProviderでヘルパ関数を使う方法【501日目】

テストコードでdataProviderを使いたい テストコードを書いているときに、dataProviderを使うことで、 テストパターンをシンプルに作りたい。 dataProviderでヘルパ関数が使えない public function XxxDataProvider() { return [ 'value' => factory(User::c…

【Laravel】app()を使った関数をテストする時にoverload使わない方が良いって話【495日目】

こんなコードがありました public function XXX() { return app('key_class')->make(); } テストコードが2種類 $mock = Mockery::mock('XxxService')->makePartial(); $this->app->instance('key_class', $mock) $mock = Mockery::mock('overload:XxxService…

【登壇レポ】新卒2年目のLaravel JP Conference初参加レポート【493日目】

Laravel JP Conferenceの記事です 前夜祭感想・参加のすすめ 登壇時のお話 他の登壇・交流のお話(ここ) Laravel JP Conferenceって? https://conference2019.laravel.jp/conference2019.laravel.jp PHPのフレームワークであるLaravelをメインテーマとした技…