我想在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"
},
感谢
答案 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
来返回代表用户的对象。无论出于何种原因,它都找不到该用户,因此它可能会返回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
案例应该做什么。
答案 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,否则为空。