Laravel Fluent

colton-jones-561163-unsplash

В большинстве случаев, при реализации Rest Api мы не может предугадать какие именно данные к нам придут в запросе. При этом каждый параметр приходится проверять, существует он или нет. Чтобы облегчить работу с такими данными, в Laravel есть отличный инструмент, класс Fluent.

Рассмотрим подробнее.

//
$array = [
    'arg1' => 'value 1',
    'arg2' => 'value 2',
    'arg3' => 'value 3'
];

$result = $array['arg1'];
//

В данном примере в переменную $result мы поместили значение ‘value 1’. И все отработало хорошо и правильно. Но, что будет, если мы обратимся к несуществующему индексу?

$result = $array['arg5'];

Интерпретатор выдаст ошибку, ErrorException : Undefined index: arg5, что и ожидаемо. Чтобы избежать таких ситуаций, приходится постоянно делать проверки для каждого индекса.

if (isset($array['arg5']) {
    $result = $array['arg5'];
}

Аналогичную ситуацию мы получим, если вместо массива будем использовать объект класса stdClass;

$obj = new \stdClass();
$obj->arg1 = 'value 1';
$obj->arg2 = 'value 2';
$obj->arg3 = 'value 3';

$result = $obj->arg5;

В данном случае будет похожая ошибка ErrorException : Undefined property: stdClass::$arg5

Наконец мы подошлю к теме статьи. Давайте создадим объект класса Fluent, из массива $array.

$object = new Fluent($array);

Теперь мы можем не думать о проверках. В случае, если индекса нет, данный объект вернет нам null, но никакой ошибки не будет.

var_dump($object->arg5);
var_dump(($object['arg5']));

NULL
NULL

Обратите внимание, что теперь мы можем обращаться к индексам, как к массиву, так и через стрелочный оператор. Если нам нужно добавить в объект новый индекс, достаточно просто присвоить ему значение.

$object->arg5 = 'value 5';
var_dump($object->arg5);
var_dump(($object['arg5']));

string(7) "value 5"
string(7) "value 5"

Но этим не ограничиваются возможности данного класса. У него много полезных методов, которые можно посмотреть в разделе документации Laravel, либо заглянув в код. Класс находится тут Illuminate\Support\Fluent;

Рассмотрим лишь несколько доступных методов. Первым посмотрим, как получить значение индекса с предустановленным значением по умолчанию. Для этого необходимо вызвать метод get, который вернет значение указанного индекса. Если индекса не существует, вернет null, но если мы укажем второй параметр методу, то в таком случае он и будет значением по умолчанию.

$object->get('arg10', 'value 10');
ar_dump($object->arg10);

string(7) "value 10"

Еще два похожих между собой метода и не менее полезные это toArray() и toJson(). Думаю нет необходимости объяснять что они делают, все понятно из названий.

Где применять возможности данного класса, решать вам. Как вариант, для передачи данных из одного класса в другой, своего рода Data Transfer Object и обработки входящих запросов.

Добавить комментарий