サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
レイングッズ
www.larajapan.com
今回は、知っていたけれどあまり使っていない、ことの話です。Laravelの入力バリデーションのことなのですが、忘れずに書いておいてより使うようにしたいです。 Laravelの入力のバリデーションでは複数のルールがあると、それらルールすべてが適用されます。 例えば、入力項目は年齢で、ルールは入力値は数字(整数)であり、かつ10歳以上とします。 $php artisan tinker Psy Shell v0.9.9 (PHP 7.2.16 — cli) by Justin Hileman >>> $input = ['age' => '9']; => [ "age" => "9", ] >>> $rule = ['age' => 'integer|gte:10']; => [ "age" => "integer|gte:10", ] >>> validator($input, $rule)-
前回は、チャンキングでプログラムが使用するメモリの量を抑えることを説明しましたが、実行速度はどうなのでしょう? 私の仮想マシンで測定してみました。50万のレコードがあります。 1000レコードごとのチャンキングは、1分32秒。 チャンキングなしで、メモリ制限を1ギガバイトとして、46秒。 チャンキングの方が2倍以上時間かかっています。 チャンキングがどのようなSQLのクエリを実行するか、tinkerで見てみます。数が多いので、ここでは10,000レコードごとのチャンキングにしています。 >>> DB::enableQueryLog(); => null >>> DB::table('users')->count(); => 500000 >>> App\User::chunk(10000, function($rows) { }); => true >>> DB::getQueryLog(
最近、フロントエンドのフレームワークのVue.jsを勉強し始めました。またしても世間の流行から一歩遅れての開始ですが、比較的大きなプロジェクトを管理する私としては、ピッカピッカの流行りをすぐに採用とは行きません。長期的な管理を考えてLaravelのように本当にメージャーになるかを見極めてからです。幸い、Laravelのコミュニティでは、Vue.jsが盛んに利用され情報が多いので、よりメージャーなReactやAngularなどのフレームワークの存在を気にしつつもLaravelとの親近さでVue.jsの習得です。Vue.jsの1からの説明は他の人のブログに任せて、私の方はいきなり実用的なVue.jsを紹介していく予定です。まず今回は、Vue.jsをフォームの入力のバリデーションに使用するところを紹介します。 フロントエンドのバリデーション フォームのバリデーションと言えば、Laravelでは、
日常、いつもの考えや習慣で仮定してしまい、「実はそうでなかった」と後で冷や汗なること多々あります。Laravelのプログラミングもそうです。その過ちを繰り返さないために、出会ったらブログに書いていくことにします。 今回はCollectionに関して、最近うっかりしたこと。 例えば、tinkerで空の結果のEloquentのCollectionを作成して、 >>> $users = User::where('email', '=', '')->get(); // 空のCollection => Illuminate\Database\Eloquent\Collection {#2319 all: [], } >>> if (empty($users)) echo "空です!" empty()で空の判断を試みるが、「実はそうでなかった」。 empty()は引数が配列ならOKだけれど、Colle
開発しているプログラムの機能が増えてくると、必然的に定義するrouteの数が増えてきます。特に、マルチ認証ともなると、関わるプレイヤーの分だけで倍増する可能性があります。 例えば、ECのプロジェクトで、会員と管理者がプレイヤーとすると、ログインだけでも2通りのURIが必要となり、routeの設定は以下のように4つ必要となります。 Route::group(['middleware' => 'web'], function () { Route::get('user/login', 'User\Auth\AuthController@showLoginForm'); Route::post('user/login', 'User\Auth\AuthController@login'); Route::get('admin/login', 'Admin\Auth\AuthController@
Laravelで、リクエスト(Request)というのは、ブラウザを通してユーザーから送られる情報をすべて含んでいるオブジェクトのことです。例えば、会員登録のフォームなら、画面でユーザーが入力したEメール、パスワード、名前、住所だけでなく、何のブラウザを使用したか(User Agent)、どのIPから送られたか、どのURLからアクセスしたかなど、また、会員ログイン後の画面なら、会員認証において保存されたクッキーもブラウザを介して、リクエストに含まれます。 リクエストの使用 リクエストの代表的な使用は、以下のようにコントローラのメソッドのパラメータです。以下は、Laravelのドキュメントからのコードから引用からですが、会員登録画面でのPOSTされたときにコールされるstoreメソッドです。 namespace App\Http\Controllers; use Illuminate\Htt
前回の「特定の会員にリアルタイムでお知らせ」の記事は、ブラウザー内で表示するお知らせの話でした。つまり、ブラウザーを開いていないとお知らせは伝わりません。今回はブラウザーを開いてなくてもデスクトップ上でユーザーにお知らせします。
Laravel 5.3になって、認証の部分が変りました。それに関していっぱい紹介したいことありますが、それは将来でのポストとして、今回は、「ログインのRemember Me」に関して学んだことを紹介します。 以下の画面のようにログインには、 「Remember Me」あるいは「次から入力を省略」、ログインのときにオンとすると次回から毎回毎回ログインする必要ないよという便利な機能。巷ではどこでも見かけます。 Laravelでも、認証のパッケージのインストール、 $ php artisan make:auth を実行すると、デフォルトでついてくる機能です。 さて、この「Remember Me」でどうやってログインを要らなくするのか、そのメカニズムを探ってみましょう。 まず、「Remember Me」をクリックしてログイン成功すると、以下のように2つのクッキーを作成します。 laravel_se
laravel 5.2 で、バリデーションルールに配列を表す .* というプレースホルダーが使えるようになりました。 例えば、次のような商品オプションのバリデーションを考えます。 入力行の追加UIやドラッグ&ドロップによるソートはjQueryなどで実装することにします(laravel から離れるので解説は省きます) この場合、項目数がいくつになるかわからないので、エレメントの属性名を name="option_name[{{$id}}]" などとし、配列を返すように作りますよね。 リクエストは次のようなものになるでしょう。配列のキーは編集データに依存しますので不定です(ここでは仮に 11, 12, 13 としました) Array ( [option_id] => Array ( [11] => Y [12] => Y [13] => Y ) [option_name] => Array (
Laravelは非常にたくさんのファイルを起動時に読み込んでいるので、パフォーマンスの改善は以前から感心があります。最近、管理画面だけでrouteの数が300近いプログラムをインストールするにあたり、重たくなることを予想して、簡単にできる範囲でLaravelでのパフォーマンスの改善を調査してみました。 1.設定ファイルのキャッシュ作成 php artisan config:cache この実行は、configのディレクトリにあるファイルすべてを合わせて1つのキャッシュファイルにします。これにより設定データのローディング時間を速めようということです。 ファイルは、 bootstrap/cache/config.php として作成されます。 この使用において、注意は3点あります。 注意点1:プログラムにおいてenv()の関数を使用してはいけない 例えば、 .envのファイルにおいて、 APP_
Eloquentのcount()の関数を使用して、DBのレコード数を数える作業はよく起こります。 例えば、前回の画像の件では、商品productのレコード1に対して商品画像product_imageレコードが複数あるという、1対多の関係。そこでは、商品を削除するときに商品画像がないかをチェックする必要あります。画像のレコードがあるなら、削除を拒否あるいはユーザーに削除してよいか尋ねるということになります。 この場合は、商品画像があるかないかは、count()するのが一番。しかし、Eloquentではいろいろなカウントのコードの仕方があります。 今回は、これを説明するために、コントローラに特別にメソッドを作成してみました。 namespace App\Http\Controllers\User; use App\Http\Controllers\Controller; use App\Pro
スロットルと聞くと、どうしてもバイクのアクセルを想像してしまいます。どちらかというとスピードを出すために。スロットルは正確にはスピードを抑圧する意味で、「スロットル全開」というと、抑制なしで最高のスピードを出すということになります。 ここでのスロットルは、パスワードを意図的に変えて不正にログインしようという試み、たいていはプログラムによる機械的な攻撃、を抑える目的のセキュリティ対策です。具体的には、例えば過去5分間に5回ログインを失敗すると、次回のログインには10分間待たなければならないという仕組みです。もちろんそれですべて防御できるとは言えないですが、少なくとも抑制にはなります。 嬉しいことにこれも、Laravelに機能があります。 スロットル機能はログインで行われるので、以前に説明したログインのプログラムを再度見てみましょう。 まず、AuthControler。 namespace A
ファイルのアップロードに関連したコードの開発で、LaravelのStorageのクラスを使用する機会がありました。そのクラスを使用しての出力処理で学んだことを今回は共有します。
マルチ認証と言っても、複数のステップでユーザーを認証するわけでもなく、ちょっとピンと来ないですね。 例えばECシステムにおいて、ユーザー画面での会員ログインと、管理画面での管理者のログインがそれぞれ別に必要とします。どちらもログインはEメールとは限らないし、片方でログインしたらもう片方でも認証となるとも限りません。つまり、ログインするユーザーの種類や場所が複数必要となる状況が多々あります。それに対応する機能が、マルチ認証です。 Laravelの5.1までは、マルチ認証は対応していなく、以下のようなパッケージをインストールして使用していました。 Laravel4.2対応のLaravel Multi Auth Laravel5.1対応のMultiAuth for Laravel 5.1 しかし、5.2からはLaravelの基本仕様となっています。さすが、Taylorくん! 今回はこの機能を見て
新規のLaravelのプロジェクトは、以下の実行で作成できます。 $ laravel new blog /blogのディレクトリが作成され、そこには以下のようなディレクトリやファイルが作成されます。 app/ bootstrap/ config/ database/ public/ resources/ storage/ tests/ vendor/ artisan composer.json composer.lock gulpfile.js package.json phpunit.xml readme.md server.php /publicのディレクトリがウェブサイトのルートとなる仮定で、その他のディレクトリはユーザーからはアクセスできないという仮定なのですが、 しかし、現実は使用するサーバーの都合により、このpublicのディレクトリを違う場所に移動する必要があります。 例えば
Gmailは 2024 年 2 月以降、Gmail アカウントに 1 日あたり 5,000 件以上のメールを送信する送信者に対していくつかの義務付けを発表しました。その1つに、「受信者がメールの配信登録を容易に解除できるようにすること」とあります。毎日何十万というメルマガを送信する私のクライアントではメルマガの受信者の大半がGmailのメールアドレスを使用しています。メルマガはLaravelのプログラムから送信されます。対応しないと迷惑メールになりますよというGoogleの警告は恐ろしいですが、Laravelなら簡単に対応できます。
このページを最初にブックマークしてみませんか?
『ララジャパン – mainly about ララベル』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く