Laravel по-русски

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

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

#1 Re: Laravel 5.x » Мультиязычность в Laravel 5 » 14.04.2018 16:31:06

Насчет хранения в куках можно написать что-то типа:
middleware Locale

PHP
class Locale
{
    public function 
handle($requestClosure $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);
    }
}

Создаем роут для смены языка

PHP
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);
});

#2 Re: Laravel 5.x » вывод данных » 14.04.2018 15:15:08

Как у вас хранение этих данных в бд реализовано?

#3 Re: Laravel 5.x » вывод данных » 14.04.2018 15:00:55

Изначально данные у вас в каком виде?

#4 Re: Laravel 5.x » Мультиязычность в Laravel 5 » 14.04.2018 14:20:55

Насчет хранения в БД;
Таблица langs
id, lang

Таблица articles
id, date

Таблица article_lang
article_id, lang_id, title, descr .... и т.д

#5 Re: Laravel 5.x » Мультиязычность в Laravel 5 » 14.04.2018 14:17:42

Опыта в laravel у меня мало, но не вижу проблем в использовании middleware. Я у себя реализовал так:
В app.php добавляем ’locales’ ⇒ [’ru’, ’az’],
Создаем middleware Locale

PHP
class Locale
{
    public function 
handle($requestClosure $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 регистрируем метод

PHP
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?) означает что это необязательный параметр

PHP
Route::get('/articles/{lang?}', ['as' => 'articles''uses' => 'ArticlesController@index']);
Route::get('/article/{id}/{lang?}', ['as' => 'article''uses' => 'ArticlesController@page']);

Формируем ссылки ($current_lang и $default_lang вы можете сформировать в контроллере)

PHP
<a href "{{response()->myUrl('articles', $current_lang$default_lang)}}">Новости</a>
<
a href "{{response()->myUrl('article', $current_lang$default_lang, ['id' => 10])}}">Страница конкретной новости</a>

#6 Re: Laravel 5.x » Получение Post запроса с другого сайта » 12.04.2018 19:19:23

Возможно сервер посылает запрос на другой url или отправляют не POST.

#7 Re: Laravel 5.x » Получение Post запроса с другого сайта » 12.04.2018 16:06:37

Файл точно не создается? Должна создаваться в папке public, в какой папке проверяете?

#8 Re: Laravel 5.x » Вопрос про сессии » 09.04.2018 16:54:36

Спасибо за ответ. Как-то не догадался...

#9 Re: Laravel 5.x » Вопрос про сессии » 08.04.2018 15:41:05

Например, сессия создается только при авторизации пользователя (или после каких-то других действий), а не каждому кто зашел на сайт и дальше при каждом обращении к сайту, проверяется если сессия была создана делаем session_start(). Если выключить куки в браузере, laravel каждый раз создает новую сессию при каждом обращении к сайту. А теперь представим, что по сайту ходят боты, которые не поддерживают куки.

#10 Laravel 5.x » Вопрос про сессии » 08.04.2018 12:31:29

novichok
Ответов: 4

Здравствуйте, начал изучать Laravel(5.6). Подскажите пожалуйста как реализовать такой механизм, чтобы стартовать сессию только для тех пользователей у кого сеанс уже запущен? Что-то типа:

if(isset($_COOKIE[$session_name]))
{
  session_start();
}

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