タグアーカイブ laravel

著者:杉浦

チートシートとしてのresources/lang/ja/validation.php

 laravelには多彩なバリデーションルールが用意されています。記述も次の様に|区切りで羅列されたルールを持つ配列と同じキーを持つ配列を二つ使うのみで簡単です。

$rules = [
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
];
//Request $request Requestはlaravel内でarrayをラッピングした高級クラス
$validatedData = $request->validate($rules);
//もしくは単に配列で
$input = [
    'title' => 'hoge'
    'body' => 'hogehoge'
];
Validator::make($input, $rules);

 ここまで簡単な記述だと適したバリデーションルールをなるべく使いたいものです。しかしrequiredやmaxの様に頻繁に使うもののみならず全てのバリデーションルールを覚えようとした場合、それは一苦労です。バリデーションルール一覧の日本語訳は丁寧に正確にしてあるのですが詳細すぎるのか長大すぎるのかあまりやりたいことではありません。
 laravelには言語設定というものがあります。これはresources/lang/以下に配置するもので、設定されたlocalに合った言語設定が適宜読み込まれます。この言語設定にはテンプレートが出回っており日本語もご多分に漏れません。次のリンクはバリデーションに用いる日本語版言語設定ファイルへのリンクです。
validation.php言語ファイル 5.6 Laravel
 このファイルにはバリデーションのエラーメッセージが含まれています。例えば次です。

'digits_between' => ':attributeは:min桁から:max桁の間で指定してください。',

 これと同様にルール名=>日本語のエラーメッセージの配列の形で様々なルールとその対応が羅列されています。エラーメッセージはユーザに伝えるためのメッセージだけあってルールの内容を簡潔に教えてくれます。このためvalidation.php言語ファイル 5.6 Laravelでざっくりバリデーションルールを読んで詳細をバリデーション 5.6 Laravelで確認するというやり方がバリデーションの処理をコーディングする際に有効です。

  • この記事いいね! (0)
著者:杉浦

Laravelのデバッグ用関数dd()

 dd()はdump and dieの略です。何をやるかというとLaravel用の便利なvar_dump();exit;です。
 dd()の使い方はシンプル。Laravelフレームワークのphpコード内で次の様に記述するのみです。

dd(変数名A,変数名B,..)

 これを実行した場合、次の図の様に渡した変数を読みやすい形で表示するhtmlコードが返されます。
 
 特に便利なのは図にあるquery builderの様な巨大な構造体を読みたい時です。通常のvar_dump()で表示しようとした場合、とても読めたものではありません。var_dumpでは常に全展開の為、長いkeyと深いネストを持ってしまった場合、表示すら難しいです。
 dd()の定義はvendor/laravel/framework/src/Illuminate/Support/helpers.phpにあります。

    /**
     * Dump the passed variables and end the script.
     *
     * @param  mixed  $args
     * @return void
     */
    function dd(...$args)
    {
        foreach ($args as $x) {
            (new Dumper)->dump($x);
        }

        die(1);
    }

 dieはexitと同じなので読み飛ばしです。Dumperの中を追うとvendor/laravel/framework/src/Illuminate/Support/Debug/Dumper.phpを読むことになります。

use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;

class Dumper
{
    /**
     * Dump a value with elegance.
     *
     * @param  mixed  $value
     * @return void
     */
    public function dump($value)
    {
        if (class_exists(CliDumper::class)) {
            $dumper = in_array(PHP_SAPI, ['cli', 'phpdbg']) ? new CliDumper : new HtmlDumper;

            $dumper->dump((new VarCloner)->cloneVar($value));
        } else {
            var_dump($value);
        }
    }
}

 ここでSymfonyのvar_dumperに渡してLaravel自身のコードは終わります。Symfonyのvar_dumperの中は満足いくeleganceな表示を行うためにいくらか大きな処理をしています。CliDumper.phpだけで600行程、htmlDumperは900行程で記事に書き起こす程読み込む気力はありませんでした。

  • この記事いいね! (0)