Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Здравствуйте.
Есть проблемка:
при истечении сессии бросается исключение TokenMismatchException ( in VerifyCsrfToken.php line 46 )
Как-то не очень красиво. На продакшене, конечно, ошибки показываться не будут, но будет белый экран.
Не плохо бы автоматом сессию обновить, или хотя-бы вывести соответствующее сообщение.
Только как эту ошибку перехватить?
public function handle($request, Closure $next)
{
if ($this->isReading($request) || $this->tokensMatch($request))
{
return $this->addCookieToResponse($request, $next($request));
}
throw new TokenMismatchException;
}
public function handle($request, Closure $next)
{
return parent::handle($request, $next);
}
public function handle($request, Closure $next)
{
try{
return parent::handle($request, $next);
}catch(TokenMismatchException $e){
return 'Сессия истекла';
}
}
id не видит, потому что ORM ограничивает зону видимости
$account = App\Account::with(['roles' => function($query){
$query->whereId($roleId);
}])->whereId($accountId);
Либо, если одной роли может принадлежать только один аккаунт:
$account = App\Account::whereHas('roles', function($query){
$query->whereId($roleId);
})->with('roles')->first();
Вообще, возможно на ORM Eloquent сделать SQL UNION?
Есть две выборки:
Рекомендуемые
$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?
Goshik, токен можно экранировать, не надо использовать {!! ... !!} без особой необходимости
Согласен
Смотрите описание ошибки после:
"Whoops, looks like something went wrong."
Предположительно: не отправлен токен
Добавьте поле:
<input type="hidden" value="{!! csrf_token() !!}" name="_token">
либо:
<input type="hidden" value="<?=csrf_token()?>" name="_token">
если не используете blade
3. whereIn()
спасибо, в документации не нашел, видно api надо смотреть
1. $this->belongsTo()->select()
большое спасибо!
Только нужно обязательно указывать id, кроме выбираемого поля, иначе получаем null
2. В чем вопрос?
Вопрос в выборе только нужных полей.
Оказалось также нужно указывать category_id, иначе получаем icon = null
Прошу помощи, чтобы разобраться в отношениях 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])
Возможно файл не валидный ( Request::file('photo')->isValid() )
Определение, загружался ли файл в запросе: Request::hasFile('photo')
P.S. Вместо var_dump() можно вполне использовать ларавеловский dd()
С инъекциями понятно, а насчет записи в базу, напр. такого: <strong>username</strong> ?
как-то не очень хорошо...
Такие теги на ура принимаются через Request
Существует ли в Laravel механизм очистки входящих данных Request::Input()?
Валидация, понятно, есть. Но как быть с sql-инъекциями, html-тегами и т.д., вручную очищать?
Goshik пишет:удалялась при закрытии браузера.
config/session expire_on_close true
Да, но в таком случаи не работает запомнить меня.
Мне нужно, чтобы механизм ramember работал правильно.
Поправка: в стандартном контроллере авторизации тоже не удаляется, если указать сгенерированный APP_KEY в app.php.
Но когда стояла стандартная строка 'SomeRandomString', авторизация удалялась при закрытии браузера, а при запомнить меня - сохранялась.
Проверил, через время действительно удаляется.
Но при закрытии браузера авторизация сохраняется. А в стандартном контроллере авторизации - удаляется.
Хочу, чтобы у меня тоже удалялась при закрытии браузера.
Тоже OpenServer. Только-что поставил 5 версию через компосер, все о.к.
Когда ставлю <php5.4 появляется выше приведенная ошибка.
Смотрите версию php, возможно конфигурация OpenServer не правильная
php 5.4+
Здравствуйте.
Авторизую пользователя вручную через Auth::attempt(). Хочу, чтобы пользователь не запоминался.
При передаче второго параметра (remember) false, пользователь все ровно остается авторизованным навсегда.
Это глюк метода, или я как-то не так его использую?