Проблема с активацией встроенного Cartalyst Sentinel в Slim Framework

Я хочу использовать 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"},

Спасибо

1

Решение

Это связано с тем, что класс Activation, предоставляемый с Sentinel, поддерживается только непосредственно Laravel, а не библиотекой Nara Laravel / Database по какой-то странной причине.

Попробуйте использовать Sentry вместо этого, если это возможно. Она также сделана Cartalyst и, по сути, представляет собой ту же библиотеку с меньшим количеством функций, но в целом выглядит менее глючной и управляет зависимостями лучше, чем Sentinel. Он также имеет более надежную документацию в целом.

РЕДАКТИРОВАТЬ: Вы можете получить хранилище активации для Native, заменив …

Activation:: с Sentinel::getActivationRepository()

0

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

Итак, если мы посмотрим на сообщение об ошибке, которое вы получили:

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 дело.

0