全120種類!Laravel5.6ヘルパー関数実例

さてさて、この間全68種類!Laravel 5.6のartisanコマンドまとめという記事を作成したのですが、やはりLaravelは開発のスピードが早いため、知らない便利なコマンドが存在することを実感することになりました。

そこで、そんな「知らないけど便利な」テクニックを習得しておくために、今回はLaravelに用意されている数々の「ヘルパー関数」を学び直してまとめることにしました。

中にはPHPの標準関数として採用してほしいぐらい便利なものもあるので、ぜひみなさんも開発の効率化の参考にしてください。

ではひとつずつ見ていきましょう。

目次

配列

array_add()で配列に新しい値を追加する

配列に新しい値を追加します。

$user = [
    'id' => 1,
    'name' => '鈴木'
];
$array = array_add($user, 'age', 25);

これを実行すると以下のようになります。

Array
(
    [id] => 1
    [name] => 鈴木
    [age] => 25
)

ちなみにPHPで配列に新しい値を追加するには、

$user['age'] = 25;

としますが、この関数との違いはすでにキーが存在する場合は無視されるという部分です。つまり、以下の場合だと「age」は25ではなく30のままです。

$user = [
    'id' => 1,
    'name' => '鈴木',
    'age' => 30
];
$array = array_add($user, 'age', 25);

array_collapse()で多重配列を1次元配列にならす

$users = [
    ['鈴木', '佐藤'],
    ['田中', '山本'],
    ['藤原']
];
print_r(array_collapse($users));

これを実行すると以下のようになります。

Array
(
    [0] => 鈴木
    [1] => 佐藤
    [2] => 田中
    [3] => 山本
    [4] => 藤原
)

array_divide()で配列をキーと値にする

$user = [
    'id' => 1,
    'name' => '鈴木',
    'age' => 23
];
[$keys, $values] = array_divide($user);

print_r($keys);
print_r($values);

これを実行すると以下のようになります。上の配列がキーで下が値です。

Array
(
    [0] => id
    [1] => name
    [2] => age
)
Array
(
    [0] => 1
    [1] => 鈴木
    [2] => 23
)

array_dot()で「ドットつなぎ」をキーとする配列にする

例えば、以下のようなスマホ・データを1次元配列に変換する場合です。

$phone = [
    'smartphone' => [
        'iPhone' => [
            'x' => 10,
            'ix' => 9,
            'xiii' => 8
        ]
    ]
];
print_r(array_dot($phone));

実行結果はこうなります。見ての通り、階層が深くなるにつれてドットでキーを繋いでいきます。

Array
(
    [smartphone.iPhone.x] => 10
    [smartphone.iPhone.ix] => 9
    [smartphone.iPhone.xiii] => 8
)

array_except()で指定したキー「以外」のデータを取得する

例えば、あるユーザーデータの「age」「job」以外のデータだけを取得する場合です。

$user = [
    'id' => 1,
    'name' => '鈴木',
    'age' => 23,
    'job' => 'student'
];
$new_array = array_except($user, ['age', 'job']);
print_r($new_array);

これを実行すると以下のように「id」と「name」だけの配列になります。

Array
(
    [id] => 1
    [name] => 鈴木
)

array_first()である条件を最初に満たすデータを取得する

例えば、最初にテストの点が80点以上だった人の点数を取得する場合です。

$scores = [
    73,
    45,
    82,
    95,
    21
];
echo array_first($scores, function($value, $key){

    return ($value > 80);   // 80点以上

});

実行結果は「82」となります。

ちなみに、function()の引数が、

  1. $value
  2. $key

となっているのも気をつけたいところです。

また、第3引数を設定しておくと、どれも該当しない場合のデフォルト値にすることができます。

$scores = [
    73,
    45,
    55,
    59,
    21
];
echo array_first($scores, function($value, $key){

    return ($value > 80);

}, -100);

つまり、これは「-100」となります。

array_last()である条件を最初に満たすデータを取得する

array_first()の逆で最後に該当するデータを取得するヘルパー関数です。
使い方は同じなのでarray_first()を参照してください。

array_flatten()で連想配列を1次元配列にならす

$user = [
    'id' => 1,
    'name' => '鈴木',
    'hobbies' => [
        'ピアノ',
        '登山',
        '音楽鑑賞'
    ]
];
print_r(array_flatten($user));

実行結果はこうなります。

Array
(
    [0] => 1
    [1] => 鈴木
    [2] => ピアノ
    [3] => 登山
    [4] => 音楽鑑賞
)

array_forget()で値を削除する

例えば、あるユーザーの趣味データを削除する場合です。

$user = [
    'id' => 1,
    'name' => '鈴木',
    'hobbies' => [
        'inside' => ['ピアノ', '音楽鑑賞'],
        'outside' => ['登山']
    ]
];
array_forget($user, 'hobbies');
print_r($user);

実行結果はこうなります。

Array
(
    [id] => 1
    [name] => 鈴木
)

また、配列の深い階層だけを削除する場合はドットで繋いだキーを使います。上の例を使って、室内の趣味だけを削除してみましょう。

array_forget($user, 'hobbies.inside');

結果はこうです。

Array
(
    [id] => 1
    [name] => 鈴木
    [hobbies] => Array
        (
            [outside] => Array
                (
                    [0] => 登山
                )

        )

)

array_pull()で値を削除する

array_forget()とほぼ同じですが、array_pull()は削除されたデータの取得ができるのが特徴です。

$user = [
    'id' => 1,
    'name' => '鈴木',
    'hobbies' => [
        'inside' => ['ピアノ', '音楽鑑賞'],
        'outside' => ['登山']
    ]
];
$removed = array_pull($user, 'hobbies.inside');
print_r($user);
print_r($removed);

実行結果はこうなります。

// 配列の内容
Array
(
    [id] => 1
    [name] => 鈴木
    [hobbies] => Array
        (
            [outside] => Array
                (
                    [0] => 登山
                )

        )

)

// 削除された内容
Array
(
    [0] => ピアノ
    [1] => 音楽鑑賞
)

array_get()で特定のデータを取得する

例えば、あるユーザーの趣味データを取得する場合です。

$user = [
    'id' => 1,
    'name' => '鈴木',
    'hobbies' => [
        'inside' => ['ピアノ', '音楽鑑賞'],
        'outside' => ['登山']
    ]
];
print_r(array_get($user, 'hobbies'));

これを実行すると、以下のようになります。

Array
(
    [inside] => Array
        (
            [0] => ピアノ
            [1] => 音楽鑑賞
        )

    [outside] => Array
        (
            [0] => 登山
        )

)

また、深い階層はドットつなぎで指定することができます。

array_get($user, 'hobbies.inside')

さらに、データが見つからない場合のためのデフォルト値は第3引数で指定します。

array_get($user, 'hobbies.others', ['なし']);

array_has()でキーを指定してデータの存在チェックをする

例えば、あるユーザーデータに「name」が含まれているかをチェックする場合です。

$user = [
    'id' => 1,
    'name' => '鈴木',
    'hobbies' => [
        'inside' => ['ピアノ', '音楽鑑賞'],
        'outside' => ['登山']
    ]
];

if(array_has($user, 'name')) {

    echo '「name」があります';

}

また、階層が深いデータはドットつなぎで指定することもできます。

if(array_has($user, 'hobbies.inside')) {

    echo '[hobbies][inside] があります';

}

さらに、キーを配列で指定することで一気に複数データが存在しているかをチェックすることもできます。

if(array_has($user, ['id', 'name'])) {

    echo '「id」も「name」もあります';

}

array_only()でキーを指定してデータ取得する

例えば、あるユーザーデータから「id」と「name」だけを取得する場合です。

$user = [
    'id' => 1,
    'name' => '鈴木',
    'hobbies' => [
        'inside' => ['ピアノ', '音楽鑑賞'],
        'outside' => ['登山']
    ]
];
print_r(array_only($user, ['id', 'name']));

実行結果はこうなります。

Array
(
    [id] => 1
    [name] => 鈴木
)

ちなみにキーは配列でなくても使えます。

array_only($user, 'id')

ただし、ドットつなぎで階層を深くする取得はできません。

// これはうまくいきません。
array_only($user, ['hobbies.inside'])

array_pluck()で該当する全データを取得する

例えば、全ユーザーの「室内の趣味」を配列で取得する場合です。

$users = [
    [
        'id' => 3,
        'hobbies' => [
            'inside' => ['ピアノ', '音楽鑑賞'],
            'outside' => ['登山']
        ]
    ],
    [
        'id' => 6,
        'hobbies' => [
            'inside' => [],
            'outside' => ['サッカー', 'BBQ']
        ]
    ],
    [
        'id' => 12,
        'hobbies' => [
            'inside' => ['映画'],
            'outside' => ['野球']
        ]
    ]
];
print_r(array_pluck($users, 'hobbies.inside'));

これを実行すると以下のようになります。

Array
(
    [0] => Array
        (
            [0] => ピアノ
            [1] => 音楽鑑賞
        )

    [1] => Array
        (
        )

    [2] => Array
        (
            [0] => 映画
        )

)

また、キーを「id」として取得することもできます。(キーがドットつなぎになってもOKです)

array_pluck($users, 'hobbies.inside', 'id');

すると結果は以下のようになります。

Array
(
    [3] => Array
        (
            [0] => ピアノ
            [1] => 音楽鑑賞
        )

    [6] => Array
        (
        )

    [12] => Array
        (
            [0] => 映画
        )

)

array_prepend()で配列の先頭にデータ追加する

例えば、「山本」さんを先頭に追加する場合です。

$names = ['鈴木', '佐藤', '田中'];
print_r(array_prepend($names, '山本'));

結果はこうなります。

Array
(
    [0] => 山本
    [1] => 鈴木
    [2] => 佐藤
    [3] => 田中
)

また、キーが必要な場合は第3引数に指定します。

$names = [
    'suzuki' => '鈴木',
    'sato' => '佐藤',
    'tanaka' => '田中'
];
print_r(array_prepend($names, '山本', 'yamamoto'));

結果はこうです。

Array
(
    [yamamoto] => 山本
    [suzuki] => 鈴木
    [sato] => 佐藤
    [tanaka] => 田中
)

array_random()でランダムに値を取得する

例えば、ランダムで名前を取得する場合です。

$names = ['鈴木', '佐藤', '田中', '山本'];
echo array_random($names); // ここはランダムな名前

※ちなみにarray_rand()はPHPの標準関数でインデックス値を返します。似ているので間違えないようにしましょう。

また、第2引数に数字をいれると、その個数分のランダムな配列データを取得することもできます。

array_random($names, 2);

array_set()で値をセットする

配列に新しい値を追加する、もしくはすでにデータがある場合は上書きするヘルパー関数です。

例えば、まだ名前がわからないユーザーデータに名前データを追加する場合はこうなります。

$user = [
    'id' => 1
];
array_set($user, 'name', '鈴木');
print_r($user);

これを実行すると以下のようになります。

Array
(
    [id] => 1
    [name] => 鈴木
)

また、すでにデータが存在する場合はデータが上書きされます。なお、例のようにドットつなぎで深い階層を指定することもできます。

$user = [
    'id' => 1,
    'hobbies' => [
        'inside' => ['ピアノ', '音楽鑑賞'],
        'outside' => ['登山']
    ]
];
array_set($user, 'hobbies.inside', ['読書']);
print_r($user);

実行結果はこうなります。

Array
(
    [id] => 1
    [hobbies] => Array
        (
            [inside] => Array
                (
                    [0] => 読書
                )

            [outside] => Array
                (
                    [0] => 登山
                )

        )

)

array_sort()で並べ替える

例えば、名前の読みがな順に並べ替えをする場合です。

$names = ['すずき', 'さとう', 'たなか', 'やまもと'];
$sorted = array_sort($names);
print_r($sorted);

実行結果はこうなります。

Array
(
    [1] => さとう
    [0] => すずき
    [2] => たなか
    [3] => やまもと
)

※キーが保持されていることに注意してください。

また、array_sort()ではfunction()でより複雑な並べ替えもできるようになっています。以下は多重配列になっている複数ユーザーを読みがなで並べ替える例です。

$users = [
    ['name' => '鈴木', 'kana' => 'すずき'],
    ['name' => '佐藤', 'kana' => 'さとう'],
    ['name' => '田中', 'kana' => 'たなか'],
    ['name' => '山本', 'kana' => 'やまもと']
];
$sorted = array_sort($users, function($values){

    return $values['kana']; // このデータを元に並べ替えられる

});
print_r($sorted);

実行結果はこうなります。

Array
(
    [1] => Array
        (
            [name] => 佐藤
            [kana] => さとう
        )

    [0] => Array
        (
            [name] => 鈴木
            [kana] => すずき
        )

    [2] => Array
        (
            [name] => 田中
            [kana] => たなか
        )

    [3] => Array
        (
            [name] => 山本
            [kana] => やまもと
        )

)

array_sort_recursive()で再帰的にデータを並べ替え

例えば、2グループの名前(かな)を一気に並べ替えする場合です。

$users = [
    1 => ['すずき', 'さとう', 'たなか', 'やまもと'],
    2 => ['たかはし', 'いとう', 'わたなべ']
];
$sorted = array_sort_recursive($users);
print_r($sorted);

これを実行すると以下のようになります。

Array
(
    [1] => Array
        (
            [0] => さとう
            [1] => すずき
            [2] => たなか
            [3] => やまもと
        )

    [2] => Array
        (
            [0] => いとう
            [1] => たかはし
            [2] => わたなべ
        )

)

array_where()である条件を満たすデータだけを取得する

例えば、テストで80点以上の点数だけを取得する場合です。

$scores = [73, 45, 87, 95, 21];
$filtered = array_where($scores, function($value){

    return ($value >= 80); // ここ条件を満たすものだけ取得

});
print_r($filtered);

実行結果はこうなります。

Array
(
    [2] => 87
    [3] => 95
)

array_wrap()で配列をつくる

例えば、文字列の名前を配列にしたい場合です。

$name = '鈴木';
$names = array_wrap($name);
print_r($names);

これを実行するとこうなります。

Array
(
    [0] => 鈴木
)

ちなみに、元から値が配列になっている場合は変化なしです。

 array_wrap(['鈴木']);

また、値が「null」の場合は空の配列が返ってきます。

array_wrap(null);

(実行結果)

Array
(
)

data_fill()で新しいデータを追加する

例えば、野外の趣味が登録されていないユーザーに新しく「登山」を追加する場合です。

$user = [
    'id' => 1,
    'hobbies' => [
        'inside' => ['ピアノ', '音楽鑑賞']
    ]
];
data_fill($user, 'hobbies.outside', ['登山']);
print_r($user);

これを実行するとこうなります。

Array
(
    [id] => 1
    [hobbies] => Array
        (
            [inside] => Array
                (
                    [0] => ピアノ
                    [1] => 音楽鑑賞
                )

            [outside] => Array
                (
                    [0] => 登山
                )

        )

)

ただし、注意が必要なのはすでに存在しているデータは無視されるということです。

実際の例で見てみましょう。
以下の例だと、すでに「BBQ」というデータが存在しているので「登山」の追加は無視されます。

$user = [
    'id' => 1,
    'hobbies' => [
        'inside' => ['ピアノ', '音楽鑑賞'],
        'outside' => ['BBQ']
    ]
];
data_fill($user, 'hobbies.outside', ['登山']);
print_r($user);

結果はこうなります。

Array
(
    [id] => 1
    [hobbies] => Array
        (
            [inside] => Array
                (
                    [0] => ピアノ
                    [1] => 音楽鑑賞
                )

            [outside] => Array
                (
                    [0] => BBQ
                )

        )

)

また、「*」アスタリスクをワイルドカードにして一気にデータ追加することもできます。

$user = [
    'id' => 1,
    'hobbies' => [
        ['name' => 'ピアノ'],
        ['name' => '読書'],
        ['name' => '絵画']
    ]
];
data_fill($user, 'hobbies.*.type', '室内');
print_r($user);

結果はこうなります。

Array
(
    [id] => 1
    [hobbies] => Array
        (
            [0] => Array
                (
                    [name] => ピアノ
                    [type] => 室内
                )

            [1] => Array
                (
                    [name] => 読書
                    [type] => 室内
                )

            [2] => Array
                (
                    [name] => 絵画
                    [type] => 室内
                )

        )

)

data_get()で指定のデータを取得する

array_get()と同様です。
使い方はarray_get()をご覧ください。

data_set()で値をセットする

array_set()と同様です。
使い方はarray_set()をご覧ください。

head()で配列の最初の値を取得する

例えば、配列にある一番最初の名前を取得する場合です。

$names = ['鈴木', '佐藤', '田中', '山本'];
echo head($names); // 鈴木

last()で配列の最後の値を取得する

例えば、配列にある一番最後の名前を取得する場合です。

$names = ['鈴木', '佐藤', '田中', '山本'];
echo last($names); // 山本

パス

app_path()で「app」フォルダを基準とするパスを取得する

echo app_path('Http/Controllers/Controller.php');

実行結果はこうなります。(実行環境によって変わります)

/home/admin/php-dev/laravel56/app/Http/Controllers/Controller.php

base_path()でアプリケーションのトップパスを基準とするパスを取得する

echo base_path('vendor/bin');

実行結果はこうなります。(実行環境によって変わります)

/home/admin/php-dev/laravel56/vendor/bin

config_path()で「config」フォルダを基準としたパスを取得する

echo config_path('app.php');

実行結果はこうなります。(実行環境によって変わります)

/home/admin/php-dev/laravel56/config/app.php

database_path()で「database」フォルダを基準としたパスを取得する

echo database_path('factories/UserFactory.php');

実行結果はこうなります。(実行環境によって変わります)

/home/admin/php-dev/laravel56/database/factories/UserFactory.php

mix()でバージョン情報の入ったパスを取得する

例えば以下のようにバージョン管理されたコンパイルをLaravel mixを使っておこなっている場合、自動的にそのハッシュ情報を追加したパスを返してくれるヘルパー関数です。

mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css')
   .version();

使い方はこうなります。

echo mix('css/app.css');

実行結果です。(環境によってidは変わります)

/css/app.css?id=24adec32c39838ad4ff2

public_path()で「public」フォルダを基準としたパスを取得する

echo public_path('css/app.css');

実行結果はこうなります。(実行環境によって変わります)

/home/admin/php-dev/laravel56/public/css/app.css

resource_path()で「reources」フォルダを基準としたパスを取得する

echo resource_path('assets/sass/app.scss');

実行結果はこうなります。(実行環境によって変わります)

/home/admin/php-dev/laravel56/resources/assets/sass/app.scss

storage_path()で「storage」フォルダを基準としたパスを取得する

echo storage_path('app/file.txt');

実行結果はこうなります。(実行環境によって変わります)

/home/admin/php-dev/laravel56/storage/app/file.txt

URL

url()でURLを取得する

サイトのURLを取得する基本となる関数です。

echo url('images/picture.jpg');

これを実行すると以下のようになります。

http://*****.test/images/picture.jpg

また、パラメータを含んだURLを作成したい場合は第2引数に配列で指定します。

url('item', [1]); // http://*****.test/item/1

また、url()は少し特殊で空のまま使うと「UrlGenerator」のインスタンスが返ってきます。つまり、以下のように様々なURL情報を簡単に取得することができます。

$url = url();

echo $url->current();
echo $url->full();
echo $url->previous();

secure_url()でHTTPSを含んだURLを取得する

url()とほぼ同じです。
ただし、引数を空にした使い方はできません。

action()でコントローラーとアクションからURLを取得する

web.phpなどRouteで定義されたURLを取得する場合です。(つまり、Routeで指定されていないものを指定できません。エラーが発生します。)

echo action('HomeController@index');

もしGETパラメータをつけたい場合は連想配列を第2引数に設定します。

echo action('HomeController@index', ['id' => 1]);

asset()でトップURLを基準にしたURLを取得する

echo asset('img/photo.jpg');

これを実行すると以下のようになります。

http://*****.test/img/photo.jpg

secure_asset()でHTTPSを含んだURLを取得する

echo secure_asset('img/photo.jpg');

これを実行すると以下のようになります。

https://*****.test/img/photo.jpg

route()でルート名を指定してURLを取得する

まず、以下のようにRouteに名前を決めておきます。

Route::get('/contact', 'HomeController@contact')->name('home.contact');

そして、以下のようにすると該当するURLが取得できます。

echo route('home.contact'); // http://*****.test/contact

もし、パラメータが必要なRouteの場合は第2引数に連想配列で指定します。

Route::get('/contact/{id}', 'HomeController@contact')->name('home.contact');
echo route('home.contact', ['id' => 1]);

実行結果はこうなります。

http://*****.test/contact/1

なお、もし相対的なURLを取得したい場合は第3引数に「false」を設定してください。

echo route('home.contact', ['id' => 1], false); // /contact/1

文字列

class_basename()でネームスペースを除去した文字列を取得する

echo class_basename('App\Http\Controllers\HomeController');

実行結果はこうなります。

HomeController

e()で特殊文字をエスケープする

htmlspecialchars()と同じような関数ですが、一文字だけなので使い勝手はこちらの方がいいです。

echo e('<div>テキスト</div>');

実行結果はこうなります。

&lt;div&gt;テキスト&lt;/div&gt;gt;

なお、第2引数はダブル・エンコードを許可するかしないかを指定できるようになっています。

例えば「&quot;」のようにすでにエスケープされた文字が含まれている場合で、第2引数を「false」にすると「&quot;」の処理は無視させることができます。(デフォルトはtrueになっています)

echo e('<div>テキスト&quot;</div>', false);

str_replace_array()で文字列置換を一気に行う

PHP標準関数のstr_replace()を拡張したような関数で、配列を使うことで一気に文字列置換をすることができます。

$text = '1番目は「?」、2番めは「?」。';
echo str_replace_array('?', ['鈴木', '佐藤'], $text);

実行結果はこうなります。

1番目は「鈴木」、2番めは「佐藤」。

str_replace_first()で最初の文字だけを置換する

例えば、テキスト中にある最初の「鈴木」を「佐藤」に置換する場合です。

$text = '鈴木さんと鈴木さんです。';
echo str_replace_first('鈴木', '佐藤', $text);

これを実行するとこうなります。

佐藤さんと鈴木さんです。

str_replace_last()で最初の文字だけを置換する

例えば、テキスト中にある最後の「鈴木」を「佐藤」に置換する場合です。

$text = '鈴木さんと鈴木さんです。';
echo str_replace_last('鈴木', '佐藤', $text);

これを実行するとこうなります。

鈴木さんと佐藤さんです。

preg_replace_array()で正規表現を使った文字列置換を一気に行う

PHPの標準関数 preg_replace()を拡張したような関数で、配列を使うことで一気に正規表現を使って文字列置換をすることができます。

$text = '1番目は「:one」、2番めは「:two」。';
echo preg_replace_array('/:[a-z_]+/', ['鈴木', '佐藤'], $text);

これを実行するとこうなります。

1番目は「鈴木」、2番めは「佐藤」。

str_before()で指定した文字より前の文字列を取得する

echo str_before('あいうえお', 'うえ'); // あい

str_after()で指定した文字より後の文字列を取得する

echo str_after('あいうえお', 'いう'); // えお

str_start()で指定した文字で始まるテキストを取得する

例えば、必ず始まりが「/」になるURLを取得したい場合です。

// スラッシュなし
echo str_start('public/images', '/');

// スラッシュあり
echo str_start('/public/images', '/');

上の例の場合はどちらも

/public/images

となります。

str_finish()で指定した文字で終わるテキストを取得する

例えば、必ず最後が「/」になるURLを取得したい場合です。

// スラッシュなし
echo str_finish('public/images', '/');

// スラッシュあり
echo str_finish('public/images/', '/');

上の例の場合はどちらも

public/images/

となります。

str_limit()で指定した文字列で切り詰めたテキストを取得する

例えば、長いテキストを表示するスペースがなく最初の部分だけを表示する場合です。

$text = '今日はいい天気です。ただ、明日は雨が降るそうです。';
echo str_limit($text, 25);

これを実行すると以下のようになります。


今日はいい天気です。ただ...

ここで注意が必要なのが、指定する数字はマルチバイトを考慮しないといけないという部分です。つまり、以下のように長さを3としても日本語だと一文字しか切り詰めてくれません。

str_limit($text, 3); // ...

なお、第3引数で切り詰めたあとの文字を指定することもできます。

echo str_limit($text, 25, '(以下略)');

実行結果はこうなります。

今日はいい天気です。ただ(以下略)

str_plural()で複数形のテキストを取得する

この関数が便利なのは、「woman」「child」などのイレギュラーな複数形も正しく作成できるところです。(あまり日本語環境では使わないかもですが..)

echo str_plural('item'); // items
echo str_plural('woman'); // women

また、数字を指定することで単数形と複数形を切り替えることもできます。

echo str_plural('item', 1); // item(単数形)
echo str_plural('woman', 2); // women(複数形)

str_singular()で単数形のテキストを取得する

「women」のような不規則変化の複数形もきちんと単数形に変換することができます。

echo str_singular('items'); // item
echo str_singular('women'); // woman

str_random()でランダムな文字列を取得する

echo str_random(25); // AsoU1MeQp2jQ0J1V2Mhf9HtZS

文字列チェック

starts_with()で指定した文字で始まるかチェックする

if(starts_with('あいうえお', 'あいう')) {

    echo '「あいう」ではじまります。';

}

ends_with()で指定した文字で終わるかチェックする

if(ends_with('あいうえお', 'うえお')) {

    echo '「うえお」で終わります。';

}

str_contains()で特定の文字列が含まれているかチェックする

例えば、テキストの中に「鈴木」が含まれているかをチェックする場合です。

if(str_contains('鈴木さん、佐藤さん', '鈴木')) {

    echo '「鈴木」が含まれています。';

}

また、配列を指定することで一気に複数のチェックをすることもできます。(ただし、どちらかが含まれているとtrueになる点に注意が必要です)

if(str_contains('鈴木さん、佐藤さん', ['鈴木', '佐藤'])) {

    echo '「鈴木」もしくは「佐藤」が含まれています。';

}

str_is()でワイルドカードを使ってマッチするかチェックする

ワイルドカードは「*」です。

if(str_is('今日は*', '今日はいい天気です。')) {

    echo 'マッチしました。';

}

もちろんワイルドカードを2つ使ってもチェックが可能です。

if(str_is('*いい天気*', '今日はいい天気です。')) {

    echo 'マッチしました。';

}

blank()で内容が空かどうかをチェックする

$value = '';

if(blank($value)) {

    echo '空です。';

}

ちなみに空と判断されるのは、以下のような値です。(ただし、全角スペースは空とは判断されないので注意)

$value = ' '; // 半角スペース
$value = null;
$value = collect();

逆に空ではないと判断されるのは、以下のような値になります。

$value = 0;
$value = true;
$value = false;
$value = -1;

if(!blank($value)) {

    echo '空ではありません。';

}

filled()で内容が空ではないかどうかをチェックする

blank()の逆バージョンです。

ケース文字列

camel_case()で「キャメル・ケース」の文字列を取得する

先頭が小文字、つなぎ部分が大文字になる「キャメルケース」の文字列を取得します。

echo camel_case('one_two_three'); // oneTwoThree

kebab_case()で「ケバブ・ケース」の文字列を取得する

全て小文字でハイフンを使って文字をつなぐ「ケバブ・ケース」の文字列を取得します。

echo kebab_case('oneTwoThree'); // one-two-three

snake_case()で「スネーク・ケース」の文字列を取得する

全て小文字でアンダーバーを使って文字をつなぐ「スネーク・ケース」の文字列を取得します。

echo snake_case('oneTwoThree'); // one_two_three

studly_case()で「スタッドリー・ケース」の文字列を取得する

大文字で文字列をつなぐ「スタッドリー・ケース」の文字列を取得します。

echo studly_case('one_two_three'); // OneTwoThree

タイトル用の文字列を取得する

アルファベット単語の先頭を大文字にする関数です。(日本語環境ではほぼ利用することはないでしょう)

echo  title_case('this is a pen.'); // This Is A Pen.

翻訳テキスト

__()で翻訳テキストを取得する

例えば、以下のパスにそれぞれ「greeting」というテキスト情報を追加したとします。

英語テキスト:resources/lang/en/message.php

<?php

return [
    'greeting' => 'Hi, there!'
];

日本語テキスト:resources/lang/ja/message.php

<?php

return [
    'greeting' => 'やぁ、こんにちは!'
];

そして、以下のように__()を使うと、自動的にターゲットの言語テキストが表示されるようになります。

echo __('message.greeting');

なお、以下のように「:」とキーを使うと可変的にテキストを取得することもできます。

<?php

return [
    'greeting' => 'やぁ、こんにちは!',
    'greeting_2' => 'やぁ、こんにちは!:nameさん'
];
echo __('message.greeting_2', ['name' => '鈴木']);

結果はこうなります。

やぁ、こんにちは!鈴木さん

trans()で翻訳テキストを取得する

__()と同様です。

trans_choice()で件数によって翻訳テキストを切り替えて取得する

例えば、翻訳データに以下のような「|」で区切られたデータを作成します。

<?php

return [
    'notification' => 'notification|notifications'
];

そして、以下のようにすると数字が「1」の場合は「notification」、それより大きい場合は「notifications」が選択されます。

echo trans_choice('message.count', 1);

ただし、これは日本語環境では利用できない機能のようです。おそらく言語的に複数形が存在しないためでしょう。

Str::uuid()でUUIDを取得する

詳しくはLaravel5.6の気になる3つの新機能をご覧ください。

echo (string) Str::uuid(); // 7c71cfde-de66-471e-8f5c-a20ff7f7a856

Str::orderedUuid()でUUIDを取得する

UUIDを取得します。ただし、パッケージをインストールするなど準備が必要です。詳しくはLaravel5.6の気になる3つの新機能をご覧ください。

echo (string) Str::orderedUuid(); // 8b6f86b0-0ad0-46e6-a199-8dde26f2a8f8

例外処理

abort()でHTTP例外を発生させる

例えば、403コードを発生させたい場合です。

abort(403);

なお、第2引数ではメッセージ、第3引数ではヘッダー情報を指定することができます。

abort(403, 'アクセスが拒否されました。', [
    'your-header' => 'xxxx'
]);

実行結果はこうなります。

abort_if()で条件付きで例外を発生させる

条件がtrueのときに例外が発生します。

$boolean = true;
abort_if($boolean, 403);

abort()と同じく第3引数ではメッセージ、第4引数ではヘッダーをそれぞれ指定することができます。

$boolean = true;
abort_if($boolean, 403, 'アクセスが拒否されました。', [
    'your-header' => 'xxxx'
]);

abort_unless()で条件付きで例外を発生させる

条件が「false」のときに例外を発生させます。
使い方はabort_if()と同じです。

throw_if()で条件がtrueの場合に例外を発生させる

$boolean = true;
throw_if($boolean, \Exception::class);

$booleantrueの時、例外を発生させることができます。

また、第3引数ではメッセージも指定することができます。

$boolean = true;
throw_if($boolean, \Exception::class, '例外が発生しました!');

実行結果はこうなります。

throw_unless()で条件がfalseの場合に例外を発生させる

throw_if()の逆バージョンです。使い方は同じです。

暗号/復号

encrypt()で暗号化する

$encrypted = encrypt('xxxx');

ちなみに暗号化する内容は配列でも問題ありません。

$encrypted = encrypt(['key' => 'value']);

暗号化されたデータを元に戻すにはdecrypt()を使います。

decrypt()で復号する

encrypt()で暗号化されたデータを元に戻すことができます。

decrypt($encrypted);

その他

app()でサービスコンテナを取得する

$container = app();
echo get_class($container); // Illuminate\Foundation\Application

また、クラスを指定することもできます。

$redirect = app('Illuminate\Routing\Redirector');
echo get_class($redirect); // Illuminate\Routing\Redirector

auth()で認証インスタンスを取得する

$auth = auth();
echo get_class($auth); // Illuminate\Auth\AuthManager

詳しくは、Laravelのよく使うヘルパー関数7選!auth()をご覧ください。

back()で元ページに戻る

コントローラー内でreturnすることで元ページへリダイレクトされます。

return back();

また、第2〜4引数にそれぞれ

  • HTTPステータスコード
  • ヘッダー
  • リダイレクトURLが特定てきない場合の予備URL

を指定することができます。

return back(302, ['your-header' => 'xxx'], 'auth/login');

bcrypt()でハッシュ値を取得する

このHash値は、パスワードなどに利用されます。

echo bcrypt('your-password'); // $2y$10$rktYv5sMpQwr85M6DBskLuRWivijwsRmVGXlsi2Pk.qXP81WKivvW

broadcast()でイベントを実行する

broadcast(new Ordered());

cache()でキャッシュを操作する

cache()は読み込みと書き込み2つの機能をもっています。

キャッシュの書き込み

cache(['your-key' => 'xxx'], 5);

第1引数は連想配列で保存したいキーと値を指定し、第2引数ではキャッシュを保存する時間(分)、もしくはCarbonインスタンスでもOKです。

$dt = now()->addMinutes(5);
cache(['your-key' => 'xxx'], $dt);

なお、永遠にキャッシュさせたい場合はforever()を使うといいでしょう。

cache()->forever('your-key', 'yyy');

キャッシュの読み込み

echo cache('your-key');

第1引数にキーを指定するだけでキャッシュされたデータを取得することができます。また、もしデータが存在しない場合のためのデフォルト値を第2引数に指定することもできます。

echo cache('your-key', 'デフォルト値');

class_uses_recursive()で利用されているtraitを取得する

例えば、「\App\User」クラスが使っている全トレイトを取得する場合です。

$traits = class_uses_recursive(\App\User::class);
print_r($traits);

trait_uses_recursive()で利用されているtraitを取得する

class_uses_recursive()と似ていますが、こちらは引数にクラスではなくトレイトを指定します。

$traits = trait_uses_recursive(\Illuminate\Notifications\Notifiable::class);
print_r($traits);

collect()でコレクションを作成する

$collection = collect(['id' => 1, 'name' => '鈴木']);

コレクションの使い方は全100種類!Laravel 5.6のコレクション実例を参照してください。

config()で設定情報を取得する

echo config('app.name');

指定するキーの先頭はconfigファイル名でその後はドットつなぎで配列の下層を指定することができます。つまり、上の例で言うと「app.php内のnameというキーの値を取得する」となります。

また、キーが存在しないときのためにデフォルト値を指定することもできます。

echo config('app.xxx', 'デフォルト値');

なお、第1引数を連想配列にすることで設定情報を入れ替えることもできます。

config(['app.name' => '新しいサイト名']);

ただし、元の設定ファイルが書き換えられるわけではないので、混乱をさけるため極力この記述は使わず、きちんと設定ファイルを変更すべきです。

cookie()でクッキー・インスタンスを取得する

$cookie = cookie('your-key', 'xxx', 5);

第1引数はキー、第2引数が値、第3引数は継続時間(分)です。

なお、クッキーの読み込みと書き込みは以下のように行います。

クッキーの書き込み

読み込みにはRequestを使います。

public function helpers(Request $request) {

    echo $request->cookie('your-key');

}

もしくはヘルパー関数を使って、以下のようにすることもできます。

echo request()->cookie('your-key');

クッキーの書き込み

書き込みはレスポンスとともに行います。

return response('Cookie Test')->cookie('your-key', 'xxx', 5);

つまり、リダイレクトなどでも同様にクッキーを作成することができます。

return redirect('home')->cookie('your-key', 'xxx', 5);

session()でセッションを管理する

session()は2つの役割を持っています。

セッションを書き込む

session(['your-key' => 'xxx']);

第1引数に連想配列を指定するとセッション・データを書き込むことができます。

セッションを読み込む

echo session('your-key');

第1引数にキーを指定した場合はセッション・データを読み込むことができます。

セッション・インスタンスを取得する

もし引数が空の場合はセッション・インスタンスが返されます。そのため、get()やput()などをアローでつなげて利用することも可能です。

$session = session(); // セッション・インスタンス
echo $session->get('your-key'); // 読み込み
$session->put('your-key', 'yyy'); // 書き込み

csrf_field()でクロスサイト・リクエスト・フォージェリ用のhiddenインプット・タグを作成する

echo csrf_field();

これを実行すると以下のようなランダムな文字列を含んだインプットタグが取得できます。主にBladeテンプレートの中で使うことになるでしょう。

<input type="hidden" name="_token" value="4WemYq0jj9gSKYETaCkhLUP9izlGyyp1LrRcNYJq">

csrf_token()でクロスサイト・リクエスト・フォージェリ用トークンを取得する

echo csrf_token();

csrf_field()の場合はインプットタグまで作成しますが、こちらはその中身だけを取得するヘルパー関数です。Ajaxなどでトークンが必要になる場合に重宝するでしょう。

dispatch()でキューを発行する

dispatch(new App\Jobs\SendEmails);

dispatch_now()で即時キューを発行する

$result = dispatch_now(new App\Jobs\SendEmails);

env()で環境変数を取得する

echo env('APP_ENV'); // local, productionなど

※注意

ただし、artisanコマンドの「config:cache」を使ってしまうと「.env」が読み込めず内容がnullになってしまう可能性があります。

event()でイベントを実行する

event(new UserRegistered($user));

factory()でファクトリービルダーを取得する

$user = factory(\App\User::class)->make();

method_field()でHTTPメソッド用のhiddenインプットタグを取得する

echo method_field('PUT');

これを実行すると以下のようなタグが取得できます。主にBladeテンプレートのフォーム内で使うことになるでしょう。

<input type="hidden" name="_method" value="PUT">

now()で現在時間のCarbonインスタンスを取得する

$now = now(); // Carbonインスタンス
echo $now->toDateTimeString();

これを実行すると以下のようになります。

2018-08-02 20:34:14

today()で今日のCarbonインスタンスを取得する

now()と同じくCarbonインスタンスを取得しますが、こちらは今日がはじまる時間を取得します。

つまり、「今日の日付」+「00時00分00秒」のCarbonインスタンスです。

$today = today();
echo $today->toDateTimeString(); // 2018-08-02 00:00:00

old()で入力済みのデータを取得する

例えば、入力フォームに名前を入力し、バリデーションで失敗した場合にすでに入力されたデータを取得する場合です。

echo old('key');
echo old('key', 'デフォルト値');

詳しくは、Laravelリダイレクト実例・全5パターンの「直前のページへ戻るリダイレクト」を参考にしてください。

optional()でエラーを発生させないコードにする

例えば、存在しないユーザーデータを取得してその名前を表示する以下のようなコードを見てみましょう。

// これはエラーになります。
$user = \App\User::find(-1);
echo $user->name;

これは実際にはエラーが表示されることになります。

optional()を使えばこのエラー発生をさせないようにすることが可能です。

$user = \App\User::find(-1);
echo optional($user)->name;

この場合、実際のデータはnullが返ることになります。

policy()でPolicyインスタンスを取得する

policy(\App\User::class);

redirect()でリダイレクトする

詳しくは、Laravelリダイレクト実例・全5パターンをご覧ください。

request()でフォーム・リクエストを取得する

引数を空にすると「Illuminate\Http\Request」のインスタンスが返ってきます。

$request = request(); // Requestインスタンス
$user = $request->user();

また、フォーム・パラメータを取得する場合は第1引数でキーを指定します。

echo request('your-key');

なお、第2引数にはデフォルト値を指定することもできます。

echo request('your-key', 'デフォルト値');

resolve()でインスタンスを取得する

$user = resolve('\App\User');
echo get_class($user); // \App\User

response()でレスポンス・インスタンスを取得する

詳しくは、Laravelのよく使うヘルパー関数7選!のresponse()をご覧ください。

retry()で指定回数の処理を繰り返す

retry()はPHPのtryを何回か繰り返す関数です。つまり、HTTPアクセスが失敗する可能性があるスクレイピングをする場合などに利用するといいでしょう。

retry(5, function () {

    echo test; // 例外発生

}, 100);

この例は「ダメなら100ミリ秒間隔で5回までfunction()を実行する」例です。

ちなみにfunction()内でreturnした値を受け取ることもできます。

$user = retry(5, function () {

    return [
        'id' => 1,
        'name' => '鈴木'
    ];

}, 100);

tap()で無名関数を実行して引数を取得する

echo tap('鈴木', function ($name) {

    // 何かを実行

});

これを実行すると「鈴木」と表示されます。どういった使用法を想定しているのか疑問ですが、おそらくコードを少なくするためのものだろうと推測しています。

なお、注意が必要なのは無名関数の中でreturnしても返り値には反映されないということです。

echo tap('鈴木', function ($name) {

    return $name .'さん';

});

この例では「鈴木さん」が返って来そうですが、実際には先ほどと同じく「鈴木」しか返ってきません。

transform()でデータを加工する

例えば、「鈴木」という文字列に「さん」をつける場合です。

echo transform('鈴木', function($name){

    return $name .'さん';

});

これを実行すると「すずきさん」となります。

なお、第3引数にはデフォルト値を指定することができ、もし第1引数が空白である場合はこのデフォルト値が適用されることになります。

echo transform(null, function($name){

    return $name .'さん';

}, '名前無し'); // 名前無し

validator()でバリデーション・インスタンスを取得する

$validator = validator($data, $rules, $messages);

value()で値を取得する

echo value('鈴木');

value()の引数に通常の値を指定するとそのままの値が返されてきます。(あまり意味があるようには思えません)

なお、function()を使って値を返すこともできます。これを使えば、例えば「日曜日だけは鈴木さんの担当」のような使い方ができます。

echo value(function(){

    if(today()->isSunday()) {

        return '鈴木'; // 日曜だけ鈴木さんが担当

    }

    return '佐藤';

});

もしfunction()内の引数を指定したい場合はwith()を使いましょう。

view()でビューを取得する

コントローラー内でview()を返すことでページ表示をさせることができます。

return view('auth.login');

with()で値を取得する

value()と似ていますが、こちらは引数も同時に指定することができます。

echo with(today(), function($today){

    if($today->isSunday()) {

        return '鈴木'; // 日曜だけ鈴木さんが担当

    }

    return '佐藤';

});

開発テスト

dd()で変数の中身を確認する

$names = ['鈴木', '佐藤', '田中', '山本'];
dd($names);

これを実行すると以下のようになります。

ちなみにdd()を使うと処理が強制的に終了されます。もし最後までコードを実行したい場合はdump()を使いましょう。

dump()で変数の中身をチェックする

dd()と同じですが、こちらは処理が途中で止まることはなく、最後までコードが実行されます。つまり、以下の「test」は表示されることになります。

$names = ['鈴木', '佐藤', '田中', '山本'];
dump($names);
echo 'test';

info()でデータをログに書き込む

info('このテキストはログに書き込まれます');

これを実行すると以下のような内容がログに書き込まれることになります。echo やdd()などでデータ表示しにくい場合やcronの調整などで利用するといいでしょう。

[2018-08-02 09:24:22] local.INFO: このテキストはログに書き込まれます  

また、その他のデータも書き込みたい場合は第2引数にセットします。

info('このテキストはログに書き込まれます', [
    'key_1' => 'value_1',
    'key_2' => 'value_2',
    'key_3' => 'value_3',
]);

実行結果はこうなります。

[2018-08-02 09:25:22] local.INFO: このテキストはログに書き込まれます {"key_1":"value_1","key_2":"value_2","key_3":"value_3"}

logger()でデバッグ用ログを書き込む

ほぼinfo()と同じ内容ですが、書き込まれる内容が以下のように少しだけ違っています。

[2018-08-02 09:30:29] local.DEBUG: デバッグレベルのログを書き込みます

また、エラー用のログを書き込む場合は以下のようにerror()をアローでつなげます。

logger()->error('これはエラー用ログです。');
[2018-08-02 09:35:07] local.ERROR: これはエラー用ログです。

report()で例外情報を報告する

app/Exceptions/Handler.php」のreportメソッドを実行するヘルパー関数です。色々とカスタマイズは可能ですが、初期状態で以下のようにすると、「storage/logs/laravel.log」に例外情報を書き込むことができます。

try {

    throw new \Exception;

} catch(\Exception $e) {

    report($e);

}

rescue()で例外処理を報告する

これもreport()と同様で「app/Exceptions/Handler.php」のreport()メソッドを実行する関数ですが、例外が発生する(かもしれない)コードはfunction()の中に書きます。

例えば、xxx()というメソッドが存在しないのに実行しようとした場合です。

rescue(function () {

    return $this->xxx(); // 存在しないので例外が発生する

});

なお、rescue()で重要な点は「例外が発生しても処理が終わらない」という点です。

また、第2引数には例外が発生した場合に返す値を指定することができます。

$result = rescue(function () {

    return $this->xxx();

}, false);

この場合、返り値「$result」のパターンは以下のようになります。

  • 例外が発生した ・・・ false
  • 例外が発生しなかった ・・・ null

なお、第2引数はfunction()にすることも可能です。

$result = rescue(function () {

    return $this->xxx();

}, function(){

    return false;

});

おわりに

今回も少し長い記事になってしまいましたが、私個人もいい学び直しができました。特に「optional()」は今回始めて知ったのですが、この関数はとても便利だと気づくことができました。

例えば、ユーザーデータが存在していない場合はなど、今まではIF文でis_null()などとして、ユーザー情報の存在チェックをしてから使うようにしてましたが、IF文は可読性を考慮して数行使ってしまうため、もっとショート・コードにできないものかと考えてました。optional()を使えばよりシンプルなコードが書けそうです。

・・・ということで今回はLaravelのもつ便利なヘルパー関数の全実例をお届けしました。みなさんの開発業務がより効率化されると嬉しいです。

ではでは!



にほんブログ村 IT技術ブログへ  にほんブログ村 IT技術ブログ プログラム・プログラマーへ


BugGUI バグ報告を効率化
たった3分でバグ報告完了!? BugGUI