Cartalyst Sentinel本机与Slim Framework

时间:2015-09-11 18:00:58

标签: php slim cartalyst-sentinel

我想在Slim框架(不是Laravel)中原生使用Cartalyst-Sentinel。 Sentinel对象正常工作(我使用Sentinel::register方法没有问题)但是当我使用Activation对象(带Activation::create()方法的示例)时,收到以下错误:

  

在第210行的...... \ vendor \ illuminate \ support \ Facades \ Facade.php中的非对象上调用成员函数create()

这是我的代码:

    $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"
},

感谢

3 个答案:

答案 0 :(得分: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来返回代表用户的对象。无论出于何种原因,它都找不到该用户,因此它可能会返回nullfalse。如果这对您的应用程序来说是可接受的行为,那么您可以执行以下操作:

$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案例应该做什么。

答案 1 :(得分:0)

这是因为由于某些奇怪的原因,Laravel只支持Sentinel提供的Activation类,而不是Native Laravel / Database库。

如果可能,请考虑使用Sentry。它也是由Cartalyst制作的,它本质上是相同的库,具有较少的功能,但似乎总体上不那么错,并且比Sentinel更好地管理依赖。它整体上也有更可靠的文档。

编辑:您可以通过替换...来获取Native的激活存储库

带有Activation::

Sentinel::getActivationRepository()

答案 2 :(得分:0)

只需使用它,它就像这样:

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

好则返回1,否则为空。