Laravel с араби c слизняки - PullRequest
       12

Laravel с араби c слизняки

0 голосов
/ 17 февраля 2020

Я использую Laravel 6 для создания блогового приложения, и язык этого приложения - арабский, но есть проблема со слагом, похоже, Laravel не поддерживает арабский c.

есть идеи, чтобы это исправить?

Контроллер

public function post($slug)
{
    $post = Post::where('slug',$slug)->first();
    return view('content.post',compact('post'));
}

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

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

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

Маршрут

Route::get('post/{slug}', 'PagesController@post')->name('post.show');

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вы можете использовать эту функцию

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',
        'slug'          => 'required|min:3|max:255|unique:posts',
        'body'          => 'required',
    ));
    $post = new Post;
    $post->title = $request->input('title');
    $post->slug = $this->slug($request->slug);
    $post->body = $request->input('body');
    $post->save();

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

Это сделает слаг для каждого языка арабский c или английский sh. и это будет работать нормально.

0 голосов
/ 17 февраля 2020
Поддержка слизня

Laravel путем транслитерации языков, таких как арабский c, не очень хороша. В качестве альтернативы вы можете использовать PHP Transliterator https://www.php.net/manual/en/transliterator.transliterate.php, чтобы получить транслитерированную строку перед отправкой через Laravel s Str::slug функцию.

Например, вы можете использовать что-то как это:

Str::slug(transliterator_transliterate("Any-Latin; Latin-ASCII; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove; Lower();", "arabic sentence you need slugged"));

Обратите внимание, что вам нужно установить PECL intl, чтобы это работало.

...