首页 > 解决方案 > Pyrocms 更换弹头

问题描述

我尝试在 pyrocms 中创建简单的模块,现在我创建了输入名称和描述的公共表单,但是 slug 是 skipField 并且是从名称生成的。此时我需要更改“slug generator”以添加后缀,例如'-'.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,
    ],
];

标签: phppyrocms

解决方案


模块迁移:

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,
        ],
    ];
}

当您键入名称时,应自动键入 slug。


推荐阅读