Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Интересная тема! Спасибо.
А что насчет фасадов? Точнее, использование их в шаблонах. Я не особо люблю фасады,по этому стараюсь передавать в шаблон обьект. К примеиу для фильтрации в категориях вместо href="{{ Request::fullUrlWithQuery(['a' => 'b']) }}" мне удобнее href="{{ $request->fullUrlWithQuery(['a' => 'b']) }}"
Не в сети
Зависит от конкретной ситуации. Я использую глобальный помощник request() при работе с объектом Request. Тестируется на ура, передавать объект в представление не нужно. Синтаксис приятнее, чем при использовании фасада.
Не в сети
- Зависит от конкретной ситуации. Я использую глобальный помощник request() при работе с объектом Request. Тестируется на ура, передавать объект в представление не нужно. Синтаксис приятнее, чем при использовании фасада.
Значит это нормальная практика использовать хелперы вместо фасадов в представлении?
И есть еще вопрос. Вот у меня в админке, у каждого круд контроллера есть свой фильтер. И почти у всех повторяется фильтрация по полям id, created_at и частично name. Но есть дополнительные фильтры по отличающимся полям.
Сейчас у каждой модели есть скоуп filter, который осуществляет фильтрацию. И в каждой модели повторяются вот эти строки
if($request->has('reset'))
{
$request->session()->forget( $this->table . '.filter');
}
$request->session()->has($this->table . '.filter.id') ? $query->where('id', $request->session()->get($this->table . '.filter.id')) : Null;
$request->session()->has($this->table . '.filter.name') ? $query->where('name', 'LIKE', '%' . $request->session()->get($this->table . '.filter.name') . '%') : Null;
// ...
if ($request->input('per_page'))
$request->session()->put($this->table . '.per_page', $request->input('per_page'));
Думаю можно этот скоуп вынести в трейт. но как быть с полями которые у каждого круд контроллера уникальные? Как то надо пропустить фильтрацию по полю, которого нет в реквесте. Но тогда этот метод разрастется ого-ого как…
Изменено TrueKanonir (07.11.2017 23:05:49)
Не в сети
Типа валидировать и проверять права он не должен. Почему он этого делать не должен?
В Laravel для этого есть Request классы и политики.
как быть с полями которые у каждого круд контроллера уникальные?
Не видя полные scope для моделей, не смогу что-то посоветовать. Если у тебя репозиторий публичный, скинь в личку.
Кстати, ты можешь существенно повысить читаемость кода, если будешь использовать:
session()->has() вместо $request->session()->has()
session('id') вместо $request->session()->get('id')
$request->id вместо $request->input('id')
и т.д.
Подробнее здесь
Изменено AlexeyMezenin (08.11.2017 16:44:21)
Не в сети
Не сразу заметил что в отдельную тему вынесли))
- Не видя полные scope для моделей, не смогу что-то посоветовать. Если у тебя репозиторий публичный, скинь в личку.
Репозитория нет, все на локалке.
/**
* Filtering The Resource
*
* @param $query
* @param Request $request
*/
public function scopeFilter($query, Request $request)
{
if($request->has('reset'))
{
$request->session()->forget($this->table . '.filter');
}
else {
if ($request->input('filter.*'))
$request->session()->put($this->table . '.filter', $request->input('filter'));
$request->session()->has($this->table . '.filter.id') ? $query->where('id', $request->session()->get($this->table . '.filter.id')) : Null;
$request->session()->has($this->table . '.filter.name') ? $query->where('name', 'LIKE', '%' . $request->session()->get($this->table . '.filter.name') . '%') : Null;
if ($request->input('sort.*'))
$request->session()->put($this->table . '.sort', $request->input('sort'));
$query->orderBy($request->session()->get($this->table . '.sort.column', 'id'), $request->session()->get($this->table . '.sort.type', 'asc'));
if ($request->input('per_page'))
$request->session()->put($this->table . '.per_page', $request->input('per_page'));
}
}
Я говорил про эти запросы PHP$query->where('id', $request->session()->get($this->table . '.filter.id'))
, они повторяются практически в каждой модели (id, name, position, created_at). Вот я и думаю, может как то все в один огромный скоуп обьединить, и вынести в трейт с проверкой PHP$request->session()->has($this->table . '.filter.name')
?
- Кстати, ты можешь существенно повысить читаемость кода, если будешь использовать:
Не в сети
Не в сети
Не в сети
Страницы 1