我有一个打开功能,我在其中显示我以这种方式执行的会话变量
$id=Session::get('id_player');
$jugador=Jugador::find($id);
$dinero=$jugador->saldo;
echo "<script>alert('".$dinero."')</script>";
那一刻它向我显示了相关的值,一切都很好但是当我去api的端点,并且我把句子(没有JS脚本)它表示这个错误ErrorException:试图获得属性'saldo '非对象
我尝试将变量作为数组访问($ dinero = $ jugador ['saldo'];)并且它也不起作用,就像我没有采用会话变量一样,因为它是不需要的值
答案 0 :(得分:1)
关于错误
正如错误所述。这意味着$ jugador是空的。
检查并指定更改
$id=Session::get('id_player');
$jugador=Jugador::find($id);
$dinero=$jugador->saldo;
echo "<script>alert('".$dinero."')</script>";
到
$id=Session::get('id_player');
//findOrFail instead of find method to through error for model not found
if ($jugador = Jugador::find($id)) {
$dinero=$jugador->saldo;
echo "<script>alert('".$dinero."')</script>";
}
为什么会话变量在api上为null?
会话在API上不存在默认值。您需要将其添加到API中间件。但我不推荐它。创建一个名为“sessions”的新中间件条目,并为其添加“start session”。像这样
应用程序/ HTTP / Kernel.php
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
// \Illuminate\Session\Middleware\AuthenticateSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
//add this middleware to the routes you expect sessions to work
'sessions' => [
\Illuminate\Session\Middleware\StartSession::class,
]
];
路由/ api.php
Route::group(['middleware' => ['sessions']], function () {
Route::post('autentificacion_api_GamePlay',
'APIGamePlayController@autentificacion');
});