Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте, подскажите пожалуйста как правильно реализовать систему единого входа для нескольких проектов на laravel
Как я понял, нужно создать отдельный проект на laravel - auth.site.ru
На нем мы храним только данные пользователя - логин, пароль, почта
На всех проектах убираем авторизацияю/регистрацию и при нажатии на авторизацию/регистрацию редиректим на auth.site.ru
Авторизируемся на auth.site.ru и после успешной авторизации, редиректим на проект, с которого зашли на auth.site.ru
Что мы должны передать с auth.site.ru?
Вариант: после авторизации на auth.site.ru мы генерирем токен и записываем его к авторизированному пользователю в бд и передаем этот токен с редиректом обратно на проект, например - pr.site.ru
На pr.site.ru записываем этот токен к куки и каждый раз отправлять запрос на API auth.site.ru(по токену получаем информацию о пользователе) с токеном из кук
На сколько это безопасно, хранить токен в куках?
На сколько будет большая нагрузка на auth.site.ru, если для получения любой информации(а это например логин в шапке сайта) о пользователе, нужно будет отправлять запрос на auth.site.ru?
Как реализовать мультисайт на laravel?
Не подходит вариант с хранением разных переводов в бд
На сайте есть: категории(100+ шт), товары(100к+ шт), характеристики(1к+ шт), новости(50+ шт), динамические страницы(10+ шт)
Нужно сделать минимум 5 языков и делать для каждого языка отдельный столбик(название, краткое, полное описание) в категориях, товарах, характеристиках... мне кажется база с ума сойдет
По этому хотелось бы в автоматическом режиме переводить страницу полностью, без хранения переводов в бд
Пробовал использовать GoogleTranslit он все переводит, но главная его проблема в том, что страница с начала подгружается на русском, а за тем через 1-3 секунды переводится на другой язык
Данный подход тоже не подходит, т.к. в первую очередь перевод страницы нужен для поисковиков, а поисковики будут видеть текст на русском языке
Еще у гугла нашел Translition API
Но пока не могу сообразить как это внедрить
Возможно ли автоматический перевести страницу на другой язык, перед загрузкой самой страницы на экран, то есть на стороне сервере?
Изначально он удаляет все , и ., а мне в определенном месте нужно разрешить использование ,.
Нашел класс Str по адресу \vendor\laravel\framework\src\Illuminate\Support\Str
И функцию slug, подправил как мне нужно(Добавил $field):
public static function slug($title, $separator = '-', $language = 'en', $field = false)
{
$title = $language ? static::ascii($title, $language) : $title;
// Convert all dashes/underscores into separator
$flip = $separator === '-' ? '_' : '-';
$title = preg_replace('!['.preg_quote($flip).']+!u', $separator, $title);
// Replace @ with the word 'at'
$title = str_replace('@', $separator.'at'.$separator, $title);
if($field) {
$title = str_replace(',', '.', $title);
$title = static::lower($title);
} else {
// Remove all characters that are not the separator, letters, numbers, or whitespace.
$title = preg_replace('![^'.preg_quote($separator).'\pL\pN\s]+!u', '', static::lower($title));
}
// Replace all separator characters and whitespace by a single separator
$title = preg_replace('!['.preg_quote($separator).'\s]+!u', $separator, $title);
return trim($title, $separator);
}
И вызываю Str::slug('1,2.4', '-', 'en', 1); - Все работает
Но получается, что при обновлении композера все может потерятся,и при переносе проекта, придется всегда копировать папку vendro.
Думал о переносе slug в свой класс, если я правильно понял, то там все связанно и придется весь класс Str переносить к себе
Может есть более простой способ?
Есть страница с выводом всех товаров(их очень много), также на странице есть не большой фильтр по get, понадобилось это все кэшировать.
Получилось сделать таким образом:
$cache_name = 'builder.'.$category->id;
$gets = \Request::all();
foreach ($gets as $key => $get) {
$cache_name .= '.'.$key.'.'.$get;
}
$prods = Cache::remember($cache_name, 10, function () use ($builder) {
return $builder->paginate(20);
});
Правильно ли это сделано? И есть ли более лучшие способы кэширования запросов?
Есть роут
Route::get('/{slug}', 'CategoryController@view')->name('view.category');
Контроллер
public function view($slug) {
$category = Category::where('slug', $slug)->first();
return view('category', [
'category' => $category
]);
}
Если перейти по ссылки site.ru/name - все хорошо работает
Если перейти по ссылки site.ru/luboy-tekst/name - Ошибка 404
Если перейти по ссылке site.ru//luboy-tekst/name - именно с двумя слэшами, то он открывает категорию Как от этого дубля избавиться, либо если он по такой ссылке находит, делать редирект(site.ru//luboy-tekst/name => site.ru/name)
Страницы 1