Метод whenFilled
Метод whenFilled применяется к объекту запроса Request
и позволяет выполнить переданное замыкание, если значение поля
присутствует в запросе и не является пустым. Первым параметром
передаётся имя поля, вторым - замыкание, которое получит значение
поля в качестве аргумента. Третьим параметром передаётся
замыкание, которое будет выполнено, если поле отсутствует или
пустое.
Синтаксис
<?php
$request->whenFilled($key, callable $callback, callable $default = null);
?>
Пример
Давайте проверим, заполнено ли поле 'name' в запросе, и выполним
действия в зависимости от этого:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function update(Request $request)
{
$request->whenFilled('name', function ($value) {
echo "Field 'name' is filled with: " . $value;
}, function () {
echo "Field 'name' is not filled";
});
}
}
?>
Результат выполнения кода при заполненном поле 'name':
"Field 'name' is filled with: John"
Пример
Давайте проверим несколько полей запроса на заполненность и применим к ним фильтрацию:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsArticle;
class ArticleController extends Controller
{
public function index(Request $request)
{
$query = Article::query();
$request->whenFilled('status', function ($value) use ($query) {
$query->where('status', $value);
});
$request->whenFilled('category', function ($value) use ($query) {
$query->where('category', $value);
});
$res = $query->get();
foreach ($res as $article) {
echo $article->title . "\n";
}
}
}
?>
Результат выполнения кода при наличии обоих полей:
"article 1"
"article 3"
Пример
Давайте используем метод whenFilled для обработки данных
в контроллере и возврата соответствующего ответа:
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppModelsUser;
class ApiController extends Controller
{
public function search(Request $request)
{
$res = [];
$request->whenFilled('email', function ($value) use (&$res) {
$res['email'] = User::where('email', $value)->first();
});
$request->whenFilled('age', function ($value) use (&$res) {
$res['age'] = User::where('age', $value)->get();
}, function () use (&$res) {
$res['age'] = "Age parameter not provided";
});
echo json_encode($res);
}
}
?>
Результат выполнения кода при наличии поля 'email' и отсутствии 'age':
{"email":{"id":1,"name":"John","email":"john@example.com"},"age":"Age parameter not provided"}