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

Я хочу использовать Cartalyst-Sentinel изначально с фреймворком Slim (не Laravel). Объект Sentinel работает правильно (я использую метод Sentinel::register без проблем), но когда я использую объект активации (пример с методом Activation::create()), получаю следующую ошибку:

Вызов функции-члена create() для не-объекта в ...\vendor\illuminate\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"
},

Благодарность


person Alex    schedule 11.09.2015    source источник
comment
Я подтверждаю, что $user является допустимым объектом.   -  person Alex    schedule 13.09.2015


Ответы (3)


Это связано с тем, что класс активации, предоставляемый Sentinel, по какой-то странной причине поддерживается только Laravel напрямую, а не Native Laravel/Database library.

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

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

Activation:: с Sentinel::getActivationRepository()

person Cody Rees-Whitley    schedule 20.12.2016

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

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.

person alexw    schedule 12.09.2015
comment
Спасибо, но объект $user действителен. Я проверил это. Я предполагаю, что экземпляр активации не инициализирован Sentinel - person Alex; 12.09.2015

просто используйте , он работает со мной так:

$data = Sentinel::register($credentials);
$user = Sentinel::findById($data['id']);
$activation = Sentinel::activate($user);

вернуть 1, если хорошо, пусто, если нет.

person Ahmed Hamada    schedule 14.06.2021