Laravel по-русски

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

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

#1 Re: Laravel 5.x » TokenMismatchException при истечении сессии » 09.04.2015 16:26:22

Чет не перехватывается:

PHP
public function report(Exception $e)
{

    if (
$e instanceof TokenMismatchException){
        return 
'Сессия устарела';
    }

    return 
parent::report($e);
}

#2 Laravel 5.x » TokenMismatchException при истечении сессии » 09.04.2015 13:38:49

Goshik
Ответов: 2

Здравствуйте.
Есть проблемка:
при истечении сессии бросается исключение TokenMismatchException ( in VerifyCsrfToken.php line 46 )
Как-то не очень красиво. На продакшене, конечно, ошибки показываться не будут, но будет белый экран.
Не плохо бы автоматом сессию обновить, или хотя-бы вывести соответствующее сообщение.
Только как эту ошибку перехватить?

Оригинальный VerifyCsrfToken

PHP
    public function handle($requestClosure $next)
    {
        if (
$this->isReading($request) || $this->tokensMatch($request))
        {
            return 
$this->addCookieToResponse($request$next($request));
        }

        throw new 
TokenMismatchException;
    }

Наследуемый

PHP
    public function handle($requestClosure $next)
    {
        return 
parent::handle($request$next);
    }

Пробую так (в наследуемом)

PHP
   public function handle($requestClosure $next)
   {
    try{
              return 
parent::handle($request$next);
        }catch(
TokenMismatchException $e){
              return 
'Сессия истекла';
        }
   }

Не получается.
Возможно есть какое-то другое решение?

#3 Re: Laravel 5.x » Проблема с получением pivot в Eloquent ORM » 28.03.2015 19:20:21

id не видит, потому что ORM ограничивает зону видимости

А если так:

PHP
$account App\Account::with(['roles' => function($query){
    
$query->whereId($roleId);
}])->
whereId($accountId);

Либо, если одной роли может принадлежать только один аккаунт:

PHP
$account App\Account::whereHas('roles', function($query){
    
$query->whereId($roleId);
})->
with('roles')->first();

#5 Laravel 5.x » ORM Eloquent: union (объединение двух запросов) или OrderBy relation » 21.03.2015 11:25:56

Goshik
Ответов: 1

Есть две выборки:
Рекомендуемые

$featured = Item::whereHas('featured', function($q){
    $q->has('star_featured');
})->with('featured')->with('rating_stars')->whereIn( 'category_id', $categories )
->whereIn( 'region_id', $regions )->orderBy('name');

Без рейтинга

$no_rated = Item::whereDoesntHave('featured', function($q){
    $q->has('star_featured');
})->with('featured')->with('rating_stars')->whereIn( 'category_id', $categories )
->whereIn( 'region_id', $regions )->orderBy('name');

Как их объединить, чтобы рекомендуемые были сначала?
Можно выбрать сразу все, но как тогда их отсортировать по наличию поля featured?

#6 Re: Laravel 5.x » Не работает POST - обработка в маршрутизаторе » 17.03.2015 13:07:15

constb пишет:

Goshik, токен можно экранировать, не надо использовать {!! ... !!} без особой необходимости

Согласен

#7 Re: Laravel 5.x » Не работает POST - обработка в маршрутизаторе » 17.03.2015 13:04:12

Смотрите описание ошибки после:

Rusl пишет:

"Whoops, looks like something went wrong."

Предположительно: не отправлен токен
Добавьте поле:
<input type="hidden" value="{!! csrf_token() !!}" name="_token">
либо:
<input type="hidden" value="<?=csrf_token()?>" name="_token">
если не используете blade

#8 Re: Laravel 5.x » ORM Eloquent: выбор из двух таблиц » 08.03.2015 15:06:02

Wide пишет:

3. whereIn()

спасибо, в документации не нашел, видно api надо смотреть

Wide пишет:

1. $this->belongsTo()->select()

большое спасибо!
Только нужно обязательно указывать id, кроме выбираемого поля, иначе получаем null

Wide пишет:

2. В чем вопрос?

Вопрос в выборе только нужных полей.
Оказалось также нужно указывать category_id, иначе получаем icon = null

#9 Laravel 5.x » ORM Eloquent: выбор из двух таблиц » 08.03.2015 13:22:40

Goshik
Ответов: 2

Прошу помощи, чтобы разобраться в отношениях Eloquent

Есть 3 таблицы:
categories

  • id

  • name

  • icon

  • parent_id

  • ...

regions

  • id

  • name

  • parent_id

  • ...

items

  • id

  • name

  • category_id

  • region_id

  • ...

Отношение прописано в модели Items

public function icon(){
    return $this->belongsTo('App\Category', 'category_id', 'id');
}

Нужно выбрать Items с одним полем (icon) из модели Category (табл. categories)
Моя выборка:

Item::where('region_id', $region_id)->with('icon')->get()->toArray()

В результате получаю items, где в поле icon содержится вся строка из categories, а мне нужно:

  • одно поле из табл. categories, типа categories.icon as icon

  • желательно отобрать только нужные поля из Item, типа get(['id', 'name', 'categories.icon as icon'])

  • в идеале, в условие where передать массив со сприском $region_id, типа Item::where('region_id', 'in', [3, 4, 5])

#10 Re: Laravel 5.x » Request::file всегда null :( » 07.03.2015 00:35:55

Возможно файл не валидный ( Request::file('photo')->isValid() )
Определение, загружался ли файл в запросе: Request::hasFile('photo')

P.S. Вместо var_dump() можно вполне использовать ларавеловский dd()

#11 Re: Laravel 5.x » Очистка входящих данных » 05.03.2015 21:09:40

С инъекциями понятно, а насчет записи в базу, напр. такого: <strong>username</strong> ?
как-то не очень хорошо...
Такие теги на ура принимаются через Request

#12 Laravel 5.x » Очистка входящих данных » 05.03.2015 12:11:32

Goshik
Ответов: 4

Существует ли в Laravel механизм очистки входящих данных Request::Input()?
Валидация, понятно, есть. Но как быть с sql-инъекциями, html-тегами и т.д., вручную очищать?

#13 Re: Laravel 5.x » Не работает механизм 'запомнить меня' при ручной аутентификации » 05.03.2015 12:02:41

Wide пишет:
Goshik пишет:

удалялась при закрытии браузера.

config/session expire_on_close true

Да, но в таком случаи не работает запомнить меня.
Мне нужно, чтобы механизм ramember работал правильно.

#14 Re: Laravel 5.x » Не работает механизм 'запомнить меня' при ручной аутентификации » 05.03.2015 12:00:13

Поправка: в стандартном контроллере авторизации тоже не удаляется, если указать сгенерированный APP_KEY в app.php.
Но когда стояла стандартная строка 'SomeRandomString', авторизация удалялась при закрытии браузера, а при запомнить меня - сохранялась.

#15 Re: Laravel 5.x » Не работает механизм 'запомнить меня' при ручной аутентификации » 05.03.2015 11:42:57

Проверил, через время действительно удаляется.
Но при закрытии браузера авторизация сохраняется. А в стандартном контроллере авторизации - удаляется.
Хочу, чтобы у меня тоже удалялась при закрытии браузера.

#16 Re: Laravel 5.x » Ошибка при установке » 04.03.2015 23:13:43

Тоже OpenServer. Только-что поставил 5 версию через компосер, все о.к.
Когда ставлю <php5.4 появляется выше приведенная ошибка.
Смотрите версию php, возможно конфигурация OpenServer не правильная

#18 Laravel 5.x » Не работает механизм 'запомнить меня' при ручной аутентификации » 04.03.2015 19:13:47

Goshik
Ответов: 5

Здравствуйте.
Авторизую пользователя вручную через Auth::attempt(). Хочу, чтобы пользователь не запоминался.
При передаче второго параметра (remember) false, пользователь все ровно остается авторизованным навсегда.
Это глюк метода, или я как-то не так его использую?

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