Я хочу использовать Cartalyst-Sentinel изначально с Slim Framework (не Laravel). Sentinel объект работает правильно (я использую Sentinel::register
метод без проблем) но когда я использую объект активации (пример с Activation::create()
метод), получите следующую ошибку:
Вызов функции-члена create () для необъекта в … \ vendor \ lightingate \ support \ Facades \ Facade.php в строке 210
Это мой код:
$data = Sentinel::register($credentials);
$user = Sentinel::findById($data['id']);
$activation = Activation::create($user);
Это часть моего composer.json:
"require": {
"slim/slim": "^2.6",
"entomb/slim-json-api": "dev-master",
"symfony/http-foundation": "^2.7",
"swiftmailer/swiftmailer": "^5.4",
"respect/validation": "^0.9.3",
"cartalyst/sentinel": "^2.0",
"illuminate/database": "^5.1",
"illuminate/events": "^5.1"},
Спасибо
Это связано с тем, что класс Activation, предоставляемый с Sentinel, поддерживается только непосредственно Laravel, а не библиотекой Nara Laravel / Database по какой-то странной причине.
Попробуйте использовать Sentry вместо этого, если это возможно. Она также сделана Cartalyst и, по сути, представляет собой ту же библиотеку с меньшим количеством функций, но в целом выглядит менее глючной и управляет зависимостями лучше, чем Sentinel. Он также имеет более надежную документацию в целом.
РЕДАКТИРОВАТЬ: Вы можете получить хранилище активации для Native, заменив …
Activation::
с Sentinel::getActivationRepository()
Итак, если мы посмотрим на сообщение об ошибке, которое вы получили:
Call to a member function create() on a non-object in ...\vendor\illuminate\support\Facades\Facade.php on line 210
Это «не объект» ваш $user
переменная. Это выглядит как будто Sentinel::findById($data['id']);
предполагается, что возвращает объект, представляющий пользователя, ища предоставленный id
, По какой-то причине он не находит этого пользователя, поэтому он, вероятно, возвращается null
или же false
вместо. Если это приемлемое поведение для вашего приложения, то вы можете сделать что-то вроде:
$data = Sentinel::register($credentials);
$user = Sentinel::findById($data['id']);
if ($user){
// The user was successfully found
$activation = Activation::create($user);
} else {
// Generate an error/exception/message here indicating that the user could not be found, or take them to the 404 page, etc.
...
}
Я не знаю достаточно о вашем заявлении, чтобы сказать, что оно должно делать в else
дело.