Содержимое Ответа должно быть строкой или объектом, реализующим __toString (), & quot; логическое значение & quot; дано в Laravel 5.4

Я использую пакет Sentinel для расширенной аутентификации в laravel. Я могу зарегистрироваться должным образом, но когда я собираюсь войти в систему, возникает ошибка вроде: «Содержимое Ответа должно быть строкой или объектом, реализующим __toString (), с заданным логическим значением». Пожалуйста, кто-нибудь, помогите мне.

Вот мои маршруты ниже:

 Route::get('/login', 'LoginController@login');
Route::post('/login', 'LoginController@postLogin');

Вот мой контроллер ниже:

 public function login(){
return view('authentication.login');
}

public function postLogin(Request $request){
Sentinel::authenticate($request->all());
return Sentinel::check();
}

0

Решение

Вот интересная вещь о реакции Laravel. Что бы вы ни возвращали из контроллера laravel в качестве ответа, он пытается преобразовать этот массив / объект в строку. Но преобразовать объект в строку можно с помощью магического метода PHP, называемого __toString(),

Поскольку вы не возвращаете объект, который имеет реализацию __toString() метод вы получаете эту ошибку.

Если вы действительно хотите увидеть результат Sentinel::check() тогда вы можете использовать dd(Sentinel::check()) вместо того, чтобы вернуть его. Кроме того, вы можете даже вернуть его как ['sentinelCheck' => Sentinel::check()] если ты действительно хочешь.

1

Другие решения

Sentinel::check() вернуть логическое значение, когда пользователь аутентифицирован, он возвращает пользователя, в противном случае false.

https://cartalyst.com/manual/sentinel/2.0#sentinel-check

Вы можете использовать оператор if для возврата ответа:

if(Sentinel::check()){
// authenticated
} else {
// not authenticated
return redirect()->back();
}
0

То же самое случилось со мной. Исправлена ​​проблема при отправке массива в качестве возврата.

контроллер

return ['status' => true, 'msg' => 'mesaj', 'data' => 'datalar'];
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector