Laravelの使える?ヘルパ関数

## Laravel8のヘルパ関数で実際に使った使えたものをまとめる
Laravelではグローバルに使える関数が多数あり、それらを使用することにより開発効率や可読性が向上します。
そのため用途にあったものがある場合、積極的に使用するようにしましょう。
以下では用途にまとめてヘルパ関数を記載しています。

## パス
### `mix()`
`mix`関数は、バージョンつけしたMixファイルのパスを取得します。

```php
$path = mix('css/app.css');
```

### `storage_path()`

`storage_path`関数は、アプリケーションの`storage`ディレクトリへの完全修飾パスを返します。`storage_path`関数を使用して、ストレージディレクトリ内の特定のファイルへの完全修飾パスを生成することもできます。

```php
$path = storage_path();

$path = storage_path('app/file.txt');
```

## 文字列
### `Str::lower()`
`Str::lower`メソッドは指定文字列を小文字に変換します。

```php
use Illuminate\Support\Str;

$converted = Str::lower('LARAVEL');

// laravel
```

### `Str::upper()`
`Str::upper`メソッドは、指定文字列を大文字に変換します。

```php
use Illuminate\Support\Str;

$string = Str::upper('laravel');

// LARAVEL
```

### `Str::substr()`
`Str::substr`メソッドは開始位置と文字列長の引数で指定した部分文字列を返します。

```php
use Illuminate\Support\Str;

$converted = Str::substr('The Laravel Framework', 4, 7);

// Laravel
```

### `Str::replace()`
`Str::replace`メソッドは、文字列内の指定した文字列を置き換えます。

```php
use Illuminate\Support\Str;

$string = 'Laravel 8.x';

$replaced = Str::replace('8.x', '9.x', $string);

// Laravel 9.x
```

## Fluent文字列
Fluent文字列はオブジェクト指向で、複数の文字列操作をチェーンできるインターフェイスを提供しています。
複数の文字列操作をする場合は、自然言語のように記述できるため、コードの可読性が上がります。
`Str::of()`の引数に対象の文字列を指定して使用します。

### `append`
`append`メソッドは、指定値を文字列へ追加します。

```php
use Illuminate\Support\Str;

$string = Str::of('Taylor')->append(' Otwell');

// 'Taylor Otwell'
```

### `contains`
`contains`メソッドは、指定された文字列に指定された値が含まれているかどうかを判別します。このメソッドは大文字と小文字を区別します。

```php
use Illuminate\Support\Str;

$contains = Str::of('This is my name')->contains('my');

// true
```

### `is`
`is`メソッドは、指定文字列が指定パターンに一致するかどうかを判別します。アスタリスクはワイルドカード値として使用できます

```php
use Illuminate\Support\Str;

$matches = Str::of('foobar')->is('foo*');

// true

$matches = Str::of('foobar')->is('baz*');

// false
```

### `trim`
`trim`メソッドは、文字列をトリムします。

```php
use Illuminate\Support\Str;

$string = Str::of('  Laravel  ')->trim();

// 'Laravel'

$string = Str::of('/Laravel/')->trim('/');

// 'Laravel'
```

### `when`
`when`メソッドは指定条件が`true`の場合、指定したクロージャを呼び出します。クロージャは、fluent文字列インスタンスを受け取ります。

```php
use Illuminate\Support\Str;

$string = Str::of('Taylor')
                ->when(true, function ($string) {
                    return $string->append(' Otwell');
                });

// 'Taylor Otwell'
```

必要であれば、３番目のパラメータとして別のクロージャを`when`メソッドに渡せます。このクロージャは、条件パラメータが`false`と評価された場合に実行します。

```php
use Illuminate\Support\Str;

$string = Str::of('Steve')
                ->when(false, function ($string) {
                    return $string->append(' Otwell');
                }, function ($string) {
                    return $string->append(' Jobs');
                });

// 'Steve Jobs'
```

## URL
### `route()`
`route`関数は、指定した名前付きルートのURLを生成します。

```php
$url = route('route.name');
```

ルートがパラメーターを受け入れる場合は、それらを関数の２番目の引数として渡すことができます。

```php
$url = route('route.name', ['id' => 1]);
```

デフォルトでは、route関数は絶対URLを生成します。相対URLを生成する場合は、関数の３番目の引数としてfalseを渡してください。

```php
$url = route('route.name', ['id' => 1], false);
```

## その他
### `abort()`
`abort`関数は、例外ハンドラによりレンダーされるであろう、HTTP例外を投げます。

```php
abort(403);
```

ブラウザに送信する必要のある例外のメッセージとカスタムHTTP応答ヘッダを指定することもできます。

```php
abort(403, 'Unauthorized.', $headers);
```

### `abort_if()`
`abort_if`関数は、指定された論理値が`true`と評価された場合に、HTTP例外を投げます。

```php
abort_if(! Auth::user()->isAdmin(), 403);
```

`abort`メソッドと同様に、例外の応答テキストを３番目の引数として指定し、カスタム応答ヘッダの配列を４番目の引数として関数に指定することもできます。

###`abort_unless()`
`abort_unless`関数は、指定した論理値が`false`と評価された場合に、HTTP例外を投げます。

```php
abort_unless(Auth::user()->isAdmin(), 403);
```

`abort`メソッドと同様に、例外の応答テキストを３番目の引数として指定し、カスタム応答ヘッダの配列を４番目の引数として関数に指定することもできます。

### `collect()`
`collect`関数は、指定値からコレクションインスタンスを生成します。

```php
$collection = collect(['taylor', 'abigail']);
```

### `logger()`
`logger`関数は、debugレベルのメッセージをログへ書き出します。

```php
logger('Debug message');
```
関連情報の配列を関数へ渡すこともできます。

```php
logger('User has logged in.', ['id' => $user->id]);
```

関数に値を渡さない場合は、ロガーインスタンスが返されます。

```php
logger()->error('You are not allowed here.');
```

### `dd()`
`dd`関数は指定された変数の内容を表示し、スクリプトの実行を停止します。

```php
dd($value);

dd($value1, $value2, $value3, ...);
```

スクリプトの実行を停止したくない場合は、代わりに`dump`関数を使ってください。

###`dump()`
`dump`関数は指定した変数をダンプします。

```php
dump($value);

dump($value1, $value2, $value3, ...);
```

### `now()`
`now`関数は、現時点を表す新しい`Illuminate\Support\Carbon`インスタンスを生成します。

```php
$now = now();
```

### `optional()`
`optional`関数はどんな引数も指定でき、そのオブジェクトのプロパティへアクセスするか、メソッドを呼び出せます。指定したオブジェクトが`null`だった場合、エラーを発生させる代わりに、プロパティとメソッドは`null`を返します。

```php
return optional($user->address)->street;

{!! old('name', optional($user)->name) !!}
```

optional関数は、２番目の引数としてクロージャも受け入れます。最初の引数として指定された値がnullでない場合、クロージャが呼び出されます。

```php
return optional(User::find($id), function ($user) {
    return $user->name;
});
```



## 参考
https://readouble.com/laravel/8.x/ja/helpers.html