Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 17.11.2017 17:46:04

транслитерация и создание slug

Всем привет!
Подскажите, правильный выбрал подход?

В форме есть два поля: "name", "slug". Нужно, чтобы пользователь видел сгенерированный slug и мог его изменить.

При смене названия, аяксом отправляю запрос:

$('[name="name"]').change(function() {
    createLink($(this), $('[name="slug"]'));
});

function createLink(src, dst) {
    $.ajax({
        method: 'get',
        url: '/generate_link/' + src.val(),
        data: {
            '_token': $('[name="_token"]').val()
        },
        success: function(data) { dst.val(data); }
    });
}

В app я создал папку Helpers и в ней файл TextHelper.php

...
namespace App\Helpers;

class TextHelper
{
    public function generateLink($source)
    {
        $generatedLink = $this->toTranslit($source);
        return response()->json($generatedLink);
    }

    protected function toTranslit($str)
    ...

Создал HelperServiceProvider.php, зарегистрировал в нем мой хелпер

...
public function register()
{
    $this->app->bind('textHelper', function() {
        return new TextHelper();
    });
}
...

И вот такое я сделал в роутах:

Route::get('/generate_link/{source}', function($source) {
    $slug = \Illuminate\Support\Facades\TextHelper::generateLink($source);
    return $slug;
});

Стилистически/технически это верно? Или можно более "благородно" ?

Не в сети

#2 17.11.2017 20:17:43

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: транслитерация и создание slug

Ого, столько телодвижений…
Можно написать аналогичную функцию str_slug() на js, и не надо никаких запросов даже делать

Не в сети

#3 20.11.2017 09:09:40

Re: транслитерация и создание slug

более благородно - на js.
на laravel более благородно - используй Str::slug($str);

Не в сети

#4 20.11.2017 14:02:49

Re: транслитерация и создание slug

как вариант:

    public static function transliterate ($string){
        $str = mb_strtolower($string, 'UTF-8');

        $leter_array = array(
            'a' => 'а',
            'b' => 'б',
            'v' => 'в',
            'g' => 'г',
            'd' => 'д',
            'e' => 'е,э',
            'jo' => 'ё',
            'zh' => 'ж',
            'z' => 'з',
            'i' => 'и,i',
            'j' => 'й',
            'k' => 'к',
            'l' => 'л',
            'm' => 'м',
            'n' => 'н',
            'o' => 'о',
            'p' => 'п',
            'r' => 'р',
            's' => 'с',
            't' => 'т',
            'u' => 'у',
            'f' => 'ф',
            'kh' => 'х',
            'ts' => 'ц',
            'ch' => 'ч',
            'sh' => 'ш',
            'shch' => 'щ',
            '' => 'ъ',
            'y' => 'ы',
            '' => 'ь',
            'yu' => 'ю',
            'ya' => 'я',
        );

        foreach ($leter_array as $leter => $kyr){
            $kyr = explode(',',$kyr); // кирилические строки разобьем в массив с разделителем запятая.
            // в строке $str мы пытаемся отыскать символы кирилицы $kyr и все найденные совпадения заменяем на ключи $leter
            $str = str_replace($kyr, $leter, $str);
        }

        // теперь необходимо учесть правильность формирования URL
        // поиск и замена по регулярному выражению.
        // перв. выраж. указываем рег выражение. втор.выраж. строка или массив строк для замены
        //   //  регуляр выражение  ()+  может повторяться 1 и более раз.,   \s пробельный символ сразу же заменяется на '-'
        // | Логическое или. либо то условие либо что указано справа от |  притом справа укажем диапазон [A-Za-z0-9-]
        //  ^ Логическое отрицание. т.е. заменяем либо пробельный символ на тире, либо любой другой символ, что не входит в указанный диапазон.
        $str = preg_replace('/(\s|[^A-Za-z0-9-])+/', '-', $str);
        $str = trim($str,'-'); // если в конце появится тире, то его удаляем.

        return $str;
    }

и юзай как обычный свой хелпер.
$name = Helpers::transliterate($request->name);

Не в сети

#5 21.11.2017 08:38:27

Re: транслитерация и создание slug

sam, зачем делать велосипед? Это уже реализовано в Laravel

Не в сети

Подвал раздела