Pyrocms change slug

172 Views Asked by At

I try to create simple module in pyrocms, and now I create public form where we input name and description, but slug is skipField and is generated from name. At this moment I need to change the "slug generator" to add suffix for example '-'.uniqid().

My code view like this:

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'));
    }
    ...

Now I need to change this slug like $_POST['name'].'-'.uniqid(). I try this by:

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

but it not work :(


Update1

The stream file:

/**
 * 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,
    ],

];

and form build file:

/**
 * 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,
    ],
];
1

There are 1 best solutions below

0
Piterden On

Module migration:

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

Adverts stream migration:

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

And categories stream migration:

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

The slug should automatically be typed when you type name.