Контроллер Laravel Backpack - Невозможно понять, как добавить логику в скрипт в методе Create.

Я установил Laravel 6 с Backpack 4. Я создал форму с 3 полями:

  • Заголовок
  • Слаг (установлен как скрытое поле)
  • Содержание

После сохранения данных я хотел бы взять заголовок и сохранить его как слаг с помощью Laravel Helper:

use Illuminate\Support\Str;
$slug = Str::slug('Laravel 6 Framework', '-');

Я не могу понять, где мне разместить этот код. В обычном приложении Laravel я бы поместил его в метод store (), сначала установил для слага «допускающий значение NULL» при валидации, а затем применил вспомогательный метод перед сохранением слага в базу данных.

Но с Laravel Backpack я потерялся ...

Есть идеи, пожалуйста?

Спасибо.


person Benny    schedule 15.01.2020    source источник
comment
не волнуйтесь, я решил не использовать рюкзак, тратя слишком много времени на поиск основных вещей ....   -  person Benny    schedule 16.01.2020


Ответы (1)


Backpack использует контроллер и модели, поэтому вы можете перезаписать Если хотите, метод хранилища контроллера.

Но для этого варианта использования я рекомендую вам изменить свою модель. Это потому, что ваша строка должна блокироваться независимо от того, откуда исходит запрос - из внешней формы или из формы панели администратора. Так что лучше иметь эту логику в одном месте - в модели, чем повторять ее в нескольких местах вашего приложения. В Laravel вы можете легко сделать это с помощью Mutator в вашей модели:

    public function setSlugAttribute($value)
    {
        $this->attributes['slug'] = \Str::slug($value, '-');
    }
person tabacitu    schedule 16.01.2020
comment
Спасибо, Tabacitu, я вернусь к старому и вернусь к шаблону от laravue. Основная проблема заключается в том, что основная цель при оплате этих инструментов - заставить нас выиграть много времени. Но запоминать весь синтаксис и то, что должно происходить по сравнению с обычной установкой Laravel, сложно (у нас нет на это времени). По крайней мере, наличие визуального конструктора, такого как Infyom или Quickadminpanel, должно быть приоритетом, чтобы нам не нужно было помнить, как писать поле, отношения или вводить командную строку. Это действительно то, где все теряют время, поскольку мы продолжаем двигаться вперед и назад в документах . - person Benny; 16.01.2020
comment
@Benny Иногда сложно изучить новые технологии, но в конце концов, я считаю, что Backpack сэкономил мне КУЛЬТУ времени. Я начал использовать Laravel вместо простого PHP, и это было сложно, потому что мне приходилось постоянно переключаться между документами Laravel, хотя я знаю PHP. Я готов поспорить, что ваш опыт изучения laravel был похож, но теперь, после его изучения, вы когда-нибудь вернетесь к простому PHP? Я чувствую то же самое в отношении Backpack, есть (IMO, небольшая) кривая обучения, но теперь я, вероятно, не буду возвращаться к простому Laravel - в большинстве случаев его достаточно легко переопределить функциональность Backpack :) - person solidau; 16.01.2020
comment
Привет, Бенни. Я здесь только для того, чтобы высказать свою точку зрения, поскольку решение уже предоставлено. Backpack очень хорошо интегрируется с Laravel. Есть некоторые сбои, но проект очень активен, и исправление / добавление функций идет хорошо. Что касается экономии времени, я не могу не подчеркнуть, сколько времени вы могли бы сэкономить, используя такой инструмент, как рюкзак. Графический интерфейс находится в разработке. У других инструментов есть свои преимущества и недостатки, мы здесь не сравниваем. В конце концов, вы должны выбрать тот, который вам наиболее удобен, но эй, иногда небольшая боль приносит большие преимущества :) Желаю вам всего наилучшего. - person Pedro X; 17.01.2020
comment
Спасибо, я решил попробовать еще раз :-) - person Benny; 21.01.2020
comment
Я не уверен, что это касается заголовка поля, я попытался установить его как скрытый и даже удалить его, но каждый раз получаю следующее: SQLSTATE [HY000]: Общая ошибка: 1364 Поле 'slug' не имеет значения по умолчанию ( SQL: вставьте в значения extra_pages (title, content, published_at, updated_at, created_at) (Положения и условия, ‹p› kjhkjhkjh ‹/p›, 14.01.2020 00:00:00, 2020-01-21 21:03 : 38, 2020-01-21 21:03:38) .Теперь я установил мутатор, как показано выше в моей модели, почему Laravel все еще сообщает мне, что поле slug не имеет значения по умолчанию? Спасибо. - person Benny; 22.01.2020
comment
Хорошо, я поговорил с кем-то на Laracast, который сказал, что причина, по которой я получаю эту ошибку, заключается в том, что поле slug пусто, а мутатор должен получить что-то в качестве значения для работы (я думал, что это сработает, как только метод th будет позвонил ... я ошибся). Как передать значение заголовка в строковое поле в setupCreateOperation (), пожалуйста? - person Benny; 22.01.2020
comment
По какой-то причине ответ Табаситу у меня не сработал, мутатор был полностью проигнорирован. В качестве обходного пути я использовал мутатор setNameAttribute и установил внутри него атрибуты $ this- ›['slug'] на основе значения name ... вроде хакерский, но он работает - person Joe Abdel Sater; 07.04.2021