В большинстве случаев, при реализации 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 и обработки входящих запросов.