Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Насчет хранения в куках можно написать что-то типа:
middleware Locale
class Locale
{
public function handle($request, Closure $next)
{
$langs = Config::get('app.locales');
if(!is_null($request->cookie('lang'))){
if (($key = array_search($request->cookie('lang'), $langs)) === false){
abort('404');
}
App::setLocale($langs[$key]);
} else {
Cookie::queue('lang', Config::get('app.locale'), 60); /* На 60 минут */
}
return $next($request);
}
}
Route::get('/set-locale/{lang?}', function($lang){
$langs = Config::get('app.locales');
if (($key = array_search($lang, $langs)) === false){
abort('404');
}
return back()->cookie('lang', $langs[$key], 60);
});
Как у вас хранение этих данных в бд реализовано?
Изначально данные у вас в каком виде?
Насчет хранения в БД;
Таблица langs
id, lang
Таблица articles
id, date
Таблица article_lang
article_id, lang_id, title, descr .... и т.д
Опыта в laravel у меня мало, но не вижу проблем в использовании middleware. Я у себя реализовал так:
В app.php добавляем ’locales’ ⇒ [’ru’, ’az’],
Создаем middleware Locale
class Locale
{
public function handle($request, Closure $next)
{
if (!empty(Route::getRoutes()->match($request)->parameters['lang'])) {
$langs = Config::get('app.locales');
if (($key = array_search(Route::getRoutes()->match($request)->parameters['lang'], $langs)) !== false) {
App::setLocale($langs[$key]);
} else {
abort('404');
}
}
return $next($request);
}
}
В AppServiceProvider регистрируем метод
public function boot()
{
Response::macro('myUrl', function ($alias, $current_lang, $default_lang, $params = false) {
if ($current_lang != $default_lang) {
is_array($params) ? $params['lang'] = $current_lang : $params = ['lang' => $current_lang];
}
return is_array($params) ? route($alias, $params) : route($alias);
});
}
В роутах пишем маршрут. (lang?) означает что это необязательный параметр
Route::get('/articles/{lang?}', ['as' => 'articles', 'uses' => 'ArticlesController@index']);
Route::get('/article/{id}/{lang?}', ['as' => 'article', 'uses' => 'ArticlesController@page']);
Формируем ссылки ($current_lang и $default_lang вы можете сформировать в контроллере)
<a href = "{{response()->myUrl('articles', $current_lang, $default_lang)}}">Новости</a>
<a href = "{{response()->myUrl('article', $current_lang, $default_lang, ['id' => 10])}}">Страница конкретной новости</a>
Возможно сервер посылает запрос на другой url или отправляют не POST.
Файл точно не создается? Должна создаваться в папке public, в какой папке проверяете?
Спасибо за ответ. Как-то не догадался...
Например, сессия создается только при авторизации пользователя (или после каких-то других действий), а не каждому кто зашел на сайт и дальше при каждом обращении к сайту, проверяется если сессия была создана делаем session_start(). Если выключить куки в браузере, laravel каждый раз создает новую сессию при каждом обращении к сайту. А теперь представим, что по сайту ходят боты, которые не поддерживают куки.
Здравствуйте, начал изучать Laravel(5.6). Подскажите пожалуйста как реализовать такой механизм, чтобы стартовать сессию только для тех пользователей у кого сеанс уже запущен? Что-то типа:
if(isset($_COOKIE[$session_name]))
{
session_start();
}
Страницы 1