Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет!
Подскажите, правильный выбрал подход?
В форме есть два поля: "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;
});
Стилистически/технически это верно? Или можно более "благородно" ?
Не в сети
Не в сети
более благородно - на js.
на laravel более благородно - используй Str::slug($str);
Не в сети
как вариант:
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);
Не в сети
sam, зачем делать велосипед? Это уже реализовано в Laravel
Не в сети
Страницы 1