2

Cartalyst-Sentinel を Slim フレームワーク (Laravel ではない) でネイティブに使用したい。Sentinel オブジェクトは正しく動作します (私はSentinel::register問題なくメソッドを使用します) が、Activation オブジェクト (Activation::create()メソッドを使用した例) を使用すると、次のエラーが表示されます。

...\vendor\illuminate\support\Facades\Facade.php の 210 行目の非オブジェクトでメンバ関数 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"
},

ありがとう

4

3 に答える 3

1

これは、Sentinel で提供されている Activation クラスが、ネイティブの Laravel/Database ライブラリではなく、Laravel で直接サポートされているためです。

可能であれば、代わりに Sentry の使用を検討してください。これも Cartalyst によって作成されており、基本的に同じライブラリで機能は少ないですが、全体的にバグが少なく、Sentinel よりも依存関係を適切に管理しているようです。また、全体的により信頼性の高いドキュメントがあります。

編集:ネイティブのアクティベーションリポジトリを取得するには、...を置き換えます

Activation::Sentinel::getActivationRepository()

于 2016-12-20T08:27:47.590 に答える
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

于 2015-09-12T16:11:24.390 に答える