Ответы пользователя по тегу Laravel
  • Как организовать view каталоги?

    @jazzus
    Как структурировать папки в Ларавел не написано. Делают кто как хочет. В примерах обычно начинают с ресурса в единственном числе и мне такой вариант тоже больше нравится
    user.index.base
    user.index.admin
    user.index.guest

    Где base является шаблоном для admin guest если они отличаются только частями.
    Ответ написан
  • Как вывести ошибки валидации во вью?

    @jazzus
    @error('age')
      {{ $message }}
    @enderror

    Рекомендую пройти какой-нибудь видеокурс по crud операциям/ работе с формами и освоить хелпер DD для дебага. Ответит на многие вопросы.
    Ответ написан
    Комментировать
  • Как вернуть ответ валидатора Request в Ларавел в json?

    @jazzus
    LaravelRequest автоматом вернет ошибки и код в ответе. Т.е. можно не писать велосипеды.

    Достать ошибки в js скрипте (фреймворк VUE)
    // аякс запрос
    .catch((error)=> {
      this.errors = error.response.data.errors;
    });

    подсчитать ошибки в computed
    errors_count: function () {
       return Object.keys(this.errors).length;
    },

    будет доступно errors_count
    Ответ написан
    2 комментария
  • Как можно упростить контроллер?

    @jazzus
    Что говорит Ларавел? Он говорит разделить на контроллеры. Для продуктов ProductController и т.д. Именовать методы index show update и т.д. Массив данных для вьюхи можно получать из своего класса, но можно и так оставить если в контроллере данных мало. Я бы пересмотрел логику формирования данных и наименований т.к. вроде задач сложных нет, но процессы непонятные какие-то $arrayUrl alias entity ит.д.
    Ответ написан
    1 комментарий
  • Как правильно организовать архитектуру таблиц для Eloquent?

    @jazzus
    Таблица contents не нужна. Связь с videos через ManyToMany таблица post_video. C остальными также, только непонятно почему article нельзя убрать в post и что такое tests
    Ответ написан
    Комментировать
  • Как фильтровать записи используя Eloquent?

    @jazzus
    $user->cars()
         ->whereNotNull('title')
         ->has('models')
         ->get();

    Только непонятно, как cars могут не иметь models и как title может быть null
    Ответ написан
  • Как можно скрыть блок в Laravel?

    @jazzus
    @if ($events->isNotEmpty())
     div
    @endif
    Ответ написан
    Комментировать
  • Как сделать универсальную Policy Laravel?

    @jazzus
    C помощью Gate. Прописать нужное правило в AuthServiceProvider и вызывать через Gate::allows. Но я бы так не делал. Т.к. скорее всего политики понадобятся и смысла дублировать проверки нет. Или логика для определенных моделей поменяется и придется переписывать все проверки вместо исправления одной политики. Ну и проверки политик по-интереснее выглядят. Поэтому лучше политики, без UniversalPolicy разумеется, а как в Ларавел написано - отдельно для каждой модели. Ибо в этом их смысл впринципе. А исходную инфу убрать в конфиги (цифры или что там у тебя). Можно и код проверки убрать в свой класс и вызывать в политиках, но это если там не $user->posts()->count() < config('post.limit') т.к. это не дублирование кода
    Ответ написан
    Комментировать
  • Laravel ui:auth - как вернуть json?

    @jazzus
    С помощью json методов
    $this->postJson(route('register'), $data)
         ->assertCreated();
    Ответ написан
    Комментировать
  • Как составить правильно отношение?

    @jazzus
    Тогда так
    $users = User::doesntHave('phones')
                 ->where('money', '>=', 100)
                 ->get();
    
    // в User
    public function phones()
    {
       return $this->hasMany('App\Models\Phone');
    }
    Ответ написан
    3 комментария
  • Как подгрузить комментарии в Laravel ajax?

    @jazzus
    return CommentResource::collection($comments);
    total в комплекте, взято отсюда
    Ответ написан
  • Ошибка с Route::resource() в Laravel?

    @jazzus
    В ресурсные маршруты не нужно передавать названия параметров.
    route('posts.show', $post)
    Т.е. либо ресурс либо его идентификатор если ресурса нет. Ларавел автоматом свяжет и в контроллере уже будет нужный ресурс
    public function show(Post $post)
    {
      dd($post);
    }

    Если key не id, а например slug то определить в модели так
    protected $primaryKey = 'slug';
    В бд не нужно давать префиксы для полей типа $post->post_id. Правильно делать $post->id, name, active и т.д. т.к. post всегда и так будет перед ними в названии переменной.
    И ресурсы нужно называть не post, а posts в роутах
    Route::resource('posts', 'PostController');
    Ответ написан
  • Как реализовать голосование на laravel?

    @jazzus
    Голосования, лайки, комментарии лучше делать через полиморфные связи, чтобы не плодить одинаковые таблицы и код. Т.к. сегодня голосуют за пост, завтра за фото, захочется перенести в полфиморфные, т.к. с ними в 100 раз проще, но уже будет геморойно исправлять. Я бы сразу делал полиморфные, убрал вместе сопутствующими проверками и экшен методами в трейт, который уже можно подключать к постам, фото-видео и любым другим моделям.
    Ответ написан
  • Как защитить get маршруты?

    @jazzus
    Если закрыть сам переход юзера по маршруту и просмотр json то сделать middleware isAjax c проверкой
    if (!$request->ajax()) {
     abort(404);
    }
    return $next($request);

    При попытке зайти отдаст 404. Но это не "защита" т.к. содержимое в network всегда есть в полном составе. Лучшая защита это отдавать только те данные, которые юзер видит на странице и не больше. Т.е. использовать API Resources, protected $hidden в моделях и точно составлять json ответ
    Ответ написан
    Комментировать
  • Добрый день, как писать на новом фреймворке корректно?

    @jazzus
    Писать корректно так. Возникла задача сделать роут. Открываешь раздел по роутам, используешь решения. Нужно сделать вьюху, открываешь раздел вьюх. Нужна таблица- миграции. И т.д. Если не понятно - гуглить, смотреть видео, спрашивать на Тостере. Любые желания написать свое простое и гениальное решение пресекать накорню. Смысла в этом нет т.к. в Ларавел все основные моменты и потребности предусмотрели. Чтобы ты сел и никуда не дергаясь написал проект. Если писать велосипеды, то потом воникнет навязчивое желание эти все велосипеды переписать, т.к. там 100% будут страницы неповоротливого говнокода с запутанными названиями и логикой, а это все поддерживать и менять тяжело. Тем более когда есть отлаженные решения с минимальным кодом на которые приятно смотреть и использовать, которые быстро тестируются и рефакторятся. То что ты хочшь учиться на велосипедах это ошибка. Там обучаешься только ленивому и неэффективному способу работы. Плюс можешь привыкнуть например открывать тег php во вьюхе и херачить запрос в бд. Я все свои такие велосипеды потом переписывал и это время можно было потратить на что-то полезное и интересное, поэтмоу не советую.
    Ответ написан
    Комментировать
  • Правильно ли добавлять свойство в объект модели таким образом?

    @jazzus
    А почему с with нельзя? Там же parent with children все стыкуется. Если правильно понял задачу то можно так
    Category::parents()
            ->with('children')
            ->get();
    
    // в Category
    public function children()
    {
      return $this->hasMany(self::class, 'parent_id');
    }
    
    public function scopeParents($query)
    {
        return $query->whereNull('parent_id');
    }
    Ответ написан
  • Зачем нужен namespace в группе роутов?

    @jazzus
    Помните, по умолчанию RouteServiceProvider включает ваши файлы роутов в группу пространства имён, позволяя вам регистрировать роуты контроллера без указания полного префикса пространства имён App\Http\Controllers.

    Route::namespace('Backend\Docflow\Document')
         ->name('document.')
         ->prefix('document')
         ->group(function () {
      Route::get('edit/{document}', 'DocumentController@edit')->name('edit');
    });
    Ответ написан
    Комментировать
  • Какие проекты на Laravel с открытым исходным кодом имеют правильную архитектуру?

    @jazzus
    Код должен быть такой, чтобы открыл файл и понял логику. Без документаций и комментариев. Такое у меня получается делать только с большим количеством файлов. Т.е. по-максимуму задействовать функционал Лары (там уже куча своих классов) – это в первую очередь. Остальное в своих классах. Основные простыни у меня в моделях т.к. все запросы через scope(чтобы быстро компоновать новые запросы из скоупов-частей). Решаю использованием трейтов – убираю туда скопы по темам, чтобы быстро получить доступ к группе связанных запросов и быстро их править или составить новый. Некоторые такие трейты использую в разных моделях. Например скоупы ofActive/ofApproved можно дофига где использовать. Также делаю репозитории и сервисы. Не потому что надо, а потому что мне так удобней. Т.е. книг совершенная архитектура не читал, пару раз загуглил, но там люди не особо убедительно объясняют (либо я не догоняю), поэтому делаю как нравится мне. Цель -простота и наглядность логики. Чтобы запускалась не страница кода, а класс. Все изолировано и с проверкой аргументов. И есть возможность быстро поменять логику (по методу кирпичиков). Сервис классы - логика, проверить, запустить, исполнить итд. Репозитории чтобы сформировать массив данных для фронта. Коллекции, наборы роутов, текстов и т.д. Обычно создаю базовую репу от которой наследуются остальные, т.к. много общих данных. Минимум абстракций и автоматизаций, конкретные понятные прямые действия с минимумом if. Короче много файлов, в каждом минимум кода, все поделено. Но это мой непрофессиональный опыт т.к. профильные вузы не заканчивал, в гугле не работал, занимаюсь своими проектами и ответом нужно пользоваться с осторожностью.
    Ответ написан
  • Как решить ошибку миграции Laravel?

    @jazzus
    это что с версии выше 5,8 он не работает?

    Примерно с этой версии Laravel стал генерить миграции с bigIncrements ids тогда у многих посыпалось (кто не читал описание апгрейда, конечно)) как правильно ответил Алексей пропиши в blogs

    $table->bigInteger('user_id')->unsigned();

    на Laravel 6

    Начинать лучше с 7й т.к. по сравнению с 6й есть моменты где можно потом нарваться на рефаукторинг)
    Ответ написан
    1 комментарий
  • Как организовать хранение и обработку информации о файлах на Laravel?

    @jazzus
    Для картинок сделать отдельный Seeder генерить там только картинки через отношение с файлом . Для файлов без картинок свой
    Ответ написан
    Комментировать