Пули смены Pyrocms

Я пытаюсь создать простой модуль в pyrocms, и теперь я создаю общедоступную форму, в которую мы вводим имя и описание, но slug - это skipField и создается из имени. На данный момент мне нужно изменить "генератор слагов", чтобы добавить суффикс, например '-'.uniqid().

Мой код выглядит так:

public function save(AdvertFormBuilder $form)
{


    $form->skipField('slug');
    $form->setOption('redirect', 'dodaj-ogloszenie/potwierdzenie');
    $form->setOption('redirect_error', 'dodaj-ogloszenie');
    $form->build();
    $form->validate();


    if ($form->hasFormErrors()){
        return redirect($form->getOption('redirect_error'));
    }else{
        $form->saveForm();
        return redirect($form->getOption('redirect'));
    }
    ...

Теперь мне нужно изменить этот слаг, например $_POST['name'].'-'.uniqid(). Я пробую это:

    $form->getFormField('slug')->setValue($form->getFormField('name')->value.'-'.uniqid());
    dd($form->getFormField('slug'));exit;

но это не работает :(


Обновление1

Файл потока:

/**
 * The stream definition.
 *
 * @var array
 */
protected $stream = [
    'slug' => 'adverts',
     'title_column' => 'name',
     'translatable' => true,
     'trashable' => false,
     'searchable' => false,
     'sortable' => false,
];

/**
 * The stream assignments.
 *
 * @var array
 */
protected $assignments = [
    'name' => [
        'translatable' => true,
        'required' => true,
    ],
    'slug' => [
        'unique' => true,
        'required' => true,
    ],
    'category' => [
        'required' => true,
    ],

];

и сформируем файл сборки:

/**
 * The form fields.
 *
 * @var array|string
 */
protected $fields = [
    'name'        => [
        'translatable' => true,
        'required'     => true,
        'unique'       => true,
    ],
    'slug'        => [
        'required' => true,
        'unique'   => true,
        'config'   => [
            'slugify' => 'name',
        ],
    ],
    'category' => [
        'required' => true,
    ],
];

Покажите, пожалуйста, миграцию рекламного потока. А также, что ваш код - это от контроллера? Я имею в виду публичный метод save. А откуда вторая маленькая часть?

Piterden 29.07.2018 21:54

Честно говоря, ты рок! )) Вы хотите сказать, что у вас есть конструктор форм, а не рендеринг? Покажи пожалуйста, где ты рендеришь формбилдер. Также почти все экземпляры классов пиротехники поддерживают цепочку методов.

Piterden 29.07.2018 21:57

Да, я не использую рендеринг формы, потому что раньше я использую cakephp, и в этом фреймворке конструктор форм не подходит;) В данный момент я использую обычное представление $ this-> и простую HTML-форму с {{form.fields.name. input_name}}.

bradley546994 29.07.2018 22:20

функция сохранения - это функция в контроллере, я обновляю вопрос, чтобы добавить код из потока;)

bradley546994 29.07.2018 22:20

Миграция - это неправильно! У вас есть учетная запись gitlab? Пожалуйста, зарегистрируйтесь, если нет, и дайте мне свое имя пользователя.

Piterden 29.07.2018 22:47

Окей, создаю аккаунт: @zixxus

bradley546994 29.07.2018 22:49

Кроме того, где находится ваш код класса AdvertFormBuilder? А как вы создали свой модуль?

Piterden 01.08.2018 01:41

В этот момент я добавляю $ entry = $ form-> getFormEntry (); если (! $ entry-> slug) {$ entry-> slug = $ form-> getFormField ('имя') -> значение.'- '. uniqid (); } эти строки кодировать, и это работает, но я не знаю, хорош этот метод или нет;)

bradley546994 01.08.2018 10:02

В любом случае у вас должен быть класс AdvertFormBuilder.

Piterden 02.08.2018 12:14

Ваш метод плохой и пахнет подозрительно! ИМХО

Piterden 02.08.2018 12:23

Хорошо, я удаляю код из контроллера и добавляю его в AdvertFormBuilder. В этом файле я перезаписываю функцию saveForm следующим образом: public function saveForm () {$ form = $ this-> getForm (); $ entry = $ this-> getFormEntry (); если (! $ entry-> slug) {$ entry-> slug = $ this-> getFormField ('имя') -> значение.'- '. uniqid (); } parent :: saveForm (); // ЗАДАЧА: изменить автоматически сгенерированную заглушку}

bradley546994 04.08.2018 11:51

Что ты об этом думаешь?

bradley546994 04.08.2018 11:52

Я думаю, что это более странно, чем ваш первый метод. Вам следует начать с правильных миграций. Тогда я думаю, что вы делаете неправильные поступки для достижения своей цели. Пожалуйста, проверьте папку core и посмотрите, как это было там сделано.

Piterden 05.08.2018 07:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
13
126
1

Ответы 1

Миграция модуля:

use Anomaly\Streams\Platform\Database\Migration\Migration;
use Defr\AdvertsModule\Category\CategoryModel;

class DefrModuleAdvertsCreateAdvertsFields extends Migration
{
    /**
     * The addon fields.
     *
     * @var array
     */
    protected $fields = [
        'name'     => 'anomaly.field_type.text',
        'slug'     => [
            'type'   => 'anomaly.field_type.slug',
            'config' => [
                'slugify' => 'name',
                'type'    => '-',
            ],
        ],
        'category' => [
            'type'   => 'anomaly.field_type.relationship',
            'config' => [
                'mode'    => 'lookup',
                'related' => CategoryModel::class,
            ],
        ],
    ];
}

Перенос потока объявлений:

class DefrModuleAdvertsCreateAdvertsStream extends Migration
{
    /**
     * The stream definition.
     *
     * @var array
     */
    protected $stream = [
        'slug'         => 'adverts',
        'title_column' => 'name',
        'searchable'   => true,
        'trashable'    => true,
    ];

    /**
     * The stream assignments.
     *
     * @var array
     */
    protected $assignments = [
        'name' => [
            'required' => true,
        ],
        'slug' => [
            'required' => true,
            'unique'   => true,
        ],
        'category',
    ];
}

И миграция потоков категорий:

class DefrModuleAdvertsCreateCategoriesStream extends Migration
{
    /**
     * The stream definition.
     *
     * @var array
     */
    protected $stream = [
        'slug'         => 'categories',
        'title_column' => 'name',
    ];

    /**
     * The stream assignments.
     *
     * @var array
     */
    protected $assignments = [
        'name' => [
            'required' => true,
        ],
        'slug' => [
            'required' => true,
            'unique'   => true,
        ],
    ];
}

Заголовок должен автоматически набираться при вводе имени.

Другие вопросы по теме