[英]How to get computed variable from any model and controller in laravel?
我有2個模型: User和Account 。
帳戶是公司帳戶,它具有一個slug
字段。 需要Slug來確定用戶正在訪問哪個公司。 例如,路由/account/*company_slug*/deals
意味着用戶試圖獲取company_slug公司的一系列交易。
與公司關聯的每個實體都有一個字段account_id
。 這就是為什么我需要獲得當前帳戶的原因。 我應該在哪里做以及如何做?
例如,我使用以下代碼獲取中間件CheckIfAccountAcceptedForUser
:
public function handle($request, Closure $next)
{
$account = Account::find($request->route()->parameter('account'));
abort_if(empty($account), 404) ;
abort_if(DB::table('account_user')
->where(function (Builder $query) use ($account) {
$query->where('account_slug', '=', $account->slug);
$query->where('user_id', '=', Auth::id());
})
->get()
->isEmpty(), 403);
return $next($request);
}
如果路由類似於/account/*account*/...
,如何為我的應用程序全局設置account_id?
也許這不是您想要的。
當您在中間件中檢查帳戶時,您將進行查詢,此后,您應在控制器中進行一個新查詢以獲取帳戶數據。 根據您的情況,您要查詢3個而不是1個。
您可以通過一個查詢在帳戶控制器中對其進行檢查。
路線:
Route::get('/account/{slug}/deals', 'AccountsController@deals');
帳戶管理員:
public function deals($slug){
$account = Account::where('id', Auth::user()->account_id)
->where('slug', $slug)
->firstOrFail();
$deals = Deal::where('account_id', $account->id)->get();
return view('account.deals', compact('account', 'deals'));
}
如果當前子帳戶不存在或用戶無法訪問此帳戶,它將始終響應404錯誤。 您真的需要403回應嗎?
public function handle($request, Closure $next)
{
$account = Account::find($request->route()->parameter('account'));
abort_if(empty($account), 404) ;
abort_if(DB::table('account_user')
->where(function (Builder $query) use ($account) {
$query->where('account_slug', '=', $account->slug);
$query->where('user_id', '=', Auth::id());
})
->get()
->isEmpty(), 403);
//For global use in your all view file
View::share ( 'account_id', $account->id);
// to access account_id in controller
$request->request->add(['account_id' => $account->id]);
return $next($request);
}
在控制器中
$account_id = request('account_id');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.