我正在尝试按会话传递数据。
我的控制器有两个功能:
public function setEdit(Request $request){
session(['estateId' => $request->estateId]);
return response()->json(['message' => 'success' ]);
}
public function getEdit(){
return response()->json(['base'=> session('estateId')]);
}
当我在 web.php 调用getEdit()方法时,它将正确检索estateId。
web.php:
Route::post('/setEdit', 'API\EstateController@setEdit');
Route::get('/getEdit', 'API\EstateController@getEdit');
但是,如果我在 api.php 调用getEdit()方法,它就不会获得estateId。
api.php
Route::post('/setEdit', 'API\EstateController@setEdit');
Route::get('/getEdit', 'API\EstateController@getEdit');
我很确定我在前端做得很好。 当我将路由器从web.php移动到api.php时,我没有忘记更改URL。
那么为什么我在路由器处于api.php时无法使用会话
好的,现在我知道使用session在每个页面之间传递数据,似乎是个坏主意。这是我的前端,我试图传递数据和重定向。
let apiUrl = '../api/estate/setEdit';
let config = {
headers: {'Authorization': 'Bearer ' + localStorage.getItem('token')}
};
let postItem = {'estateId':estateId};
axios.post(apiUrl, postItem ,config).then(response => {
location.replace('edit-estate');
}).catch(function (error) {
console.log(error);
});
我发现我可以将estate_id作为URL中的参数(例如location.replace(' edit-estate?estate_id = 15'); )
有我的新问题:
的
1。如何将标记放入标题?
2.如果我想通过json怎么做?
答案 0 :(得分:0)
默认情况下,您不应该在api中使用会话,因为在api的情况下,larval不会启动会话。看看kernel.php:
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\Illuminate\Routing\Middleware\SubstituteBindings::class,
\App\Http\Middleware\InitiateApp::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
最好为api服务而不是会话使用post参数和基于令牌的身份验证,但对于API和API,您可以使用Web中间件而不是api。 Web请求(不推荐)。