Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
AlexeyMezenin, и вправду, проблема решилась. Всё намного проще, чем я думал. Ещё раз, спасибо.
Я там немного ковырялся, но по моему именно это не пробовал.
Вечером или уже завтра утром заюзаю, и отпишусь. Спасибо.
Во вьёхах есть директория errors где задаёшь собственные страницы ошибок. С 404 всё понятно, при неизвестном маршруте приложение само выдаёт вьюуху 404.blade.php. Даже в случаях когда нужно искусственно подсунуть эту страницу и статус пользователю abort(404) справляется прекрасно.
А вот при 500ой ошибке сервера при выключенном дебаге, вылетает стандартная Laravel'овская "Упс, в приложении что-то пошло не так". И как то это не очень эстетично и совсем некрасиво. Даже искусственная подтасовка abort(500) не помогает.
Гуру Laravel'a подскажите, пожалуйста, как это реализовать из коробки, оптимальнейшим способом.
P.S. Вообще Laravel 5.3, но правила думаю едины для всех пятых версий...
AlexeyMezenin, спасибо, но проблему уже решил. Появилась она после переноса на продакшн. Я тупо команды выполнял одну за другой, а оказывается, сначала нужно сгенерировать ключ, потом скопипастить его в .env и после уже чистить кэш.
Здравствуйте.
Laravel 5.3
Не запускается приложение. Вылетает:
RuntimeException in Encrypter.php line 43: The only supported ciphers are AES-128-CBC and AES-256-CBC with the correct key lengths.
Нагуглил три команды, для решения проблемы:
php artisan key:generate
php artisan config:clear
php artisan config:cache
Выполнил все три, проблема плевать на них хотела, и не собирается уходить. По прежнему выскакивает та же ошибка.
Проблема решилась созданием отдельной группы middleware - admin. Перенёс туда все middleware из web и добавил туда middleware admin.
И маленький, но ооочень важный нюанс, middleware admin в своей группе\массиве должен обязательно идти после middleware StartSession, в противном случае в пользователе так же будет null.
Надеюсь, кому-то поможет.
Всем спасибо.
Блин, нет, вроде. Очень странное поведение...
Сейчас взял код всего Middleware из офсайта документации SleepingOwl(весь код ниже). Но один фиг в $auth->user() лежит null. А на страницах Auth::user() определяется. Относительно давно не работал с Laravel, но раньше никогда такого не было...
<?php
namespace App\Http\Middleware;
use App\User;
use Closure;
use Illuminate\Support\Facades\Auth;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
*
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
$auth = Auth::guard($guard);
dd($auth);
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401);
} else {
return redirect()->guest('login');
}
}
if (! $auth->user()->isAdmin()) {
return response('Access denied.', 401);
}
return $next($request);
}
}
Laravel: 5.3
В ядре зарегал этот Middleware только в маршрутах. И действительно, если добавить его в группу "web" или же просто как обычный Middleware, то на всех страницах Auth::user() = null.
Создал этот Middleware для SleepingOwl. И прописал в его конфигах 'middleware' => ['admin'],
Как то так(((
JSON Вам в помощь.
Перед занесением в БД кодируйте массив в JSON, после извлечения из БД декодируйте JSON-строку.
просто твоя миддлварь отрабатывает слишком рано
Простите, не доходит, как сделать, чтобы она отрабатывала позже...?
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Contracts\Auth\Guard;
class Admin
{
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
* @return void
*/
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return response
*/
public function handle($request, Closure $next)
{
dd($this->auth->check());
return $next($request);
}
}
Laravel: 5.3
Зарегал пользователя admin. Везде на страницах он определяется:
Auth::check() - true
Auth::user() - данные пользователя
Request::user() - данные пользователя
Создал middleware Admin, и в нём (даже после авторизации) получаю такие результаты:
Auth::check() - false
Auth::user() - null
Request::user() - null
Где я туплю? Направьте, пожалуйста...
Вопрос отклоняется. Ужасная техподдержка на хостинге, с их стороны косяк был.
Менял и на 5.5 и на 5.6 не помогает. Вылазит всё эта же ошибка. В чём ещё может быть? -=((
Сорри! Как опубликовал почти сразу нашёл причину -=)))))) закон подлости.
Скопипастил с предыдущего шаблона, а там была пагинация. А тут её нет. Отсюда метод линкс и весь косяк. Туплю -=))))
Вроде всё в коробке есть же. Прописал маршруты сделал вьюхи, но по переходу password/email редиректит на главную. Что может быть не так?
Если английский не очень, то смотри касты, благо их на русском достаточно.
А где это кастов по Ларавелу на русском прям достаточно. Не те ли пару плэйлистов на ютюбе ты в виду имеешь?
BMTH пишет:Можно сделать инпут хидден с валуе айди новости,и потом в контроллере привязывать уже
В данном случае это не будет работать. Элемент input hidden хорош в тех случаях, когда данные в контроллер передаются методом POST при передаче данных формы.
Но ведь так и есть. Комментарий передаётся из формы методом пост, роут также post.
BMTH, спасибо. Тоже вариант, но я уже по первому способу реализовал. Буду иметь ввиду на будущее.
Есть же пара не плохих админок для Ларавел. Сам далеко не спец но слышал, что frozennode и sleeping owl, вроде не дурны.
Кажется допёр -=)))))) ну это я знаю, страницы новостей у меня так и сделаны, каждой новости по странице, айди передаётся. Но у меня на странице с новостью форма коммента, и она отправляет пост-запрос на добавление коммента на эту страницу. Вашим толчок, допёр, в атрибуте экшена формы нужно передать айди новости в маршрут(роут). Должно же как часики работать -=))))
P.S. есть книжка по Ларавелу? Или имеешь ввиду по PHP в общем -=))
Очередной нубский вопрос. Вообще суть в том, что нужно получить айди статьи/новости. Допустим есть страница "news/23", на этой странице можно оставить коммент, естесно чтобы привязать коммент к этой новости, мне нужно айди новости. Как в Ларавеле оптимальнейше получить айди новости в этом случае?
AlexeyMezenin, благодарствую!
О каких именно "данных пользователя после авторизации" идет речь?
О данных из таблицы пользователей в БД.