Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 07.11.2017 07:09:29

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Использование фасадов в шаблонах

Интересная тема! Спасибо.
А что насчет фасадов? Точнее, использование их в шаблонах. Я не особо люблю фасады,по этому стараюсь передавать в шаблон обьект. К примеиу для фильтрации в категориях вместо href="{{ Request::fullUrlWithQuery(['a' => 'b']) }}" мне удобнее href="{{ $request->fullUrlWithQuery(['a' => 'b']) }}"

Не в сети

#2 07.11.2017 11:31:14

Re: Использование фасадов в шаблонах

Зависит от конкретной ситуации. Я использую глобальный помощник request() при работе с объектом Request. Тестируется на ура, передавать объект в представление не нужно. Синтаксис приятнее, чем при использовании фасада.

Не в сети

#3 07.11.2017 23:02:26

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Использование фасадов в шаблонах

  1. Зависит от конкретной ситуации. Я использую глобальный помощник request() при работе с объектом Request. Тестируется на ура, передавать объект в представление не нужно. Синтаксис приятнее, чем при использовании фасада.

Значит это нормальная практика использовать хелперы вместо фасадов в представлении?

И есть еще вопрос. Вот у меня в админке, у каждого круд контроллера есть свой фильтер. И почти у всех повторяется фильтрация по полям id, created_at и частично name. Но есть дополнительные фильтры по отличающимся полям.
Сейчас у каждой модели есть скоуп filter, который осуществляет фильтрацию. И в каждой модели повторяются вот эти строки

PHP
    if($request->has('reset'))
    {
        
$request->session()->forget$this->table '.filter');
    }

и эти

PHP
    $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)

Не в сети

#4 08.11.2017 16:42:18

Re: Использование фасадов в шаблонах

Типа валидировать и проверять права он не должен. Почему он этого делать не должен?

В 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)

Не в сети

#5 16.11.2017 23:10:14

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Использование фасадов в шаблонах

Не сразу заметил что в отдельную тему вынесли))

  1. Не видя полные scope для моделей, не смогу что-то посоветовать. Если у тебя репозиторий публичный, скинь в личку.

Репозитория нет, все на локалке.

PHP
    /**
     * Filtering The Resource
     *
     * @param $query
     * @param Request $request
     */
    
public function scopeFilter($queryRequest $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. Кстати, ты можешь существенно повысить читаемость кода, если будешь использовать:

ыНачал уже все исправлять)

Не в сети

#6 17.11.2017 10:00:50

Re: Использование фасадов в шаблонах

Попробуй это, ну или трейт.

Не в сети

#7 17.11.2017 10:20:18

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Использование фасадов в шаблонах

  1. Попробуй это,

Они не подходят, тк они будут применяться сразу в любой выборке, а писать каждый раз withoutGlobalScopes не очень хочется. Решил все в трейт перенести

Не в сети

Подвал раздела