Автоматическое обновление значения поля Slug на основе заданной функции c в Laravel - PullRequest
0 голосов
/ 24 марта 2020

Я строю систему блогов, используя Laravel 6, я использую функцию для генерации уникального Slug.

Я хочу сделать поле в форме создания сообщения, это поле будет обновлено автоматически, пока я печатаю в поле заголовка.

Я хочу сгенерировать значение поля Slug из функции Slug при вводе в поле заголовка.

Так есть ли способ сделать это, используя jQuery или что-то еще?

Функция Slug

public function slug($string, $separator = '-') {
    if (is_null($string)) {
        return "";
    }

    $string = trim($string);

    $string = mb_strtolower($string, "UTF-8");

    $string = preg_replace("/[^a-z0-9_\sءاأإآؤئبتثجحخدذرزسشصضطظعغفقكلمنهويةى]#u/", "", $string);

    $string = preg_replace("/[\s-]+/", " ", $string);

    $string = preg_replace("/[\s_]/", $separator, $string);

    return $string;
}

Способ хранения

public function store(Request $request)
{
    $this->validate($request, array(
        'title'         => 'required|max:255',
        'body'          => 'required',
    ));
    $post = new Post;
    $post->title = $request->input('title');
    $post->body = $request->input('body');

    $post->save();

    return redirect('admin/posts')->with('success', 'post is successfully saved');
}

Просмотр

    <form action="{{ route('posts.store') }}" method="post">
    @csrf
    <div class="row gutters-tiny">
                    <div class="col-md-7">
                            <div class="block block-rounded block-themed">
                                <div class="block-header bg-gd-primary">
                                    <div class="block-options">
                                        <button type="submit" class="btn btn-sm btn-alt-primary">
                                            <i class="fa fa-save mr-5"></i> Save
                                        </button>
                                    </div>
                                </div>
                                <div class="block-content block-content-full">
                                    <div class="form-group row">
                                        <label class="col-12" for="ecom-product-name">Title</label>
                                        <div class="col-12">
                                            <input type="text" class="form-control" id="title" name="title"  value="">
                                        </div>
                                    </div>

                                    <div class="form-group row">
                                        <label class="col-12">Body</label>
                                        <div class="col-12">
                                            <textarea class="form-control" id="body" name="body" rows="8"></textarea>
                                        </div>
                                    </div>
                                </div>
                            </div>
                    </div>
                    </div>
                    </form>

1 Ответ

0 голосов
/ 24 марта 2020

Вы можете изменить эти две функции в своем коде. Я пробую этот код в laravel проекте.

Функция Slug:

public function slug($string, $separator = '-') {
    if (is_null($string)) {
        return "";
    }

    $string = trim($string);

    $string = mb_strtolower($string, "UTF-8");

    $string = preg_replace("/[^a-z0-9_\sءاأإآؤئبتثجحخدذرزسشصضطظعغفقكلمنهويةى]#u/", "", $string);

    $string = preg_replace("/[\s-]+/", " ", $string);

    $string = preg_replace("/[\s_]/", $separator, $string);

    return slug_str($string).'-'.rand(0,9);
}

Метод хранения:

public function store(Request $request)
{
    $this->validate($request, array(
        'title'         => 'required|max:255',
        'body'          => 'required',
    ));
    $post = new Post;
    $post->title = $request->input('title');
    $post->body = $request->input('body');
    $post->slug = slug($request->input('title'));
    $post->save();
    return redirect('admin/posts')->with('success', 'post is successfully saved');
}

Ссылочный URL: Нажмите, чтобы услышать

...