serii81
@serii81
Я люблю phр...

Как в laravel построить сложную логику?

Привет всем.
Есть request для сохранения данных

public function rules()
  {
    return [
      'category_id' => 'exists:App\Category,id',
      'client_id' => 'exists:App\Client,id',
      'book_id' => 'exists:App\Book,id',
      'days_issued' => 'nullable|string',
      'is_returned' => 'nullable|boolean',
      'return_date' => 'nullable|date',
    ];
  }


Это заказ клиента.
Клиент может заказать только 2 книги, и чтобы они были разные и чтобы поле is_returned было false.
Это поле будет позже менятся на странице списка заказов.

Я понимаю, что могу написать эту логику прямо в контроллере, но тогда прийдется избавиться от StoreRequest, и использовать обычный Request.

Хотя можно сделать первую валидацию на существование полей в StoreRequest, а потом в контроллере дописть логику?

Заранее благодарен.
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
Sanes
@Sanes
В StoreRequest валидируйте. Логику, если удобно, в контроллере. В чём проблема?
На уникальность книги надо раньше проверять. На этапе корзины. Если существует, то добавляем кол-во.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
iMedved2009
@iMedved2009
Не люблю людей
Бизнес-логике - не место в контроллере.

AppServiceProvider
public function boot(){
Validator::extend('count_books', function($attribute, $value, $parameters) {
        $count = IssueBook::where('client_id', $value)->where('is_returned', false)->count()
        return $count < 2;
});
}

StoreRequest
public function rules()
  {
    return [
      'category_id' => 'exists:App\Category,id',
      'client_id' => 'exists:App\Client,id|count_books',
      'book_id' => 'exists:App\Book,id',
      'days_issued' => 'nullable|string',
      'is_returned' => 'nullable|boolean',
      'return_date' => 'nullable|date',
    ];
  }
Ответ написан
@jazzus
Данная проверка никакого отношения к валидации полей формы не имеет. Смотри авторизацию с возвратом сообщений.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы