簡體   English   中英

如何從laravel中的任何模型和控制器獲取計算變量?

[英]How to get computed variable from any model and controller in laravel?

我有2個模型: UserAccount

帳戶是公司帳戶,它具有一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM