设置全局变量可在所有控制器方法Laravel 5.3中访问

时间:2017-02-23 14:50:29

标签: php global-variables laravel-5.3

我有这条路线

Route::group(['middleware' => 'returnphase'], function () {
    Route::get('/', 'FrontendController@home')->name('homepage');
});

我的中间件检查什么阶段(逻辑现在不重要)是我的应用程序,我需要控制器设置一个全局变量,我可以在FrontendController内的所有方法中使用,因为我需要从数据库读取一些依赖的数据从那张支票:

中间件代码,我需要设置一个我可以在前端控制器中使用的phase_id varibale。

namespace Cbcc\Http\Middleware;

use Closure;

class ReturnPhaseMiddleware
{


    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        /**
         * TODO: Phase id check logic
         */

        // SETTING GLOBAL PHASE ID VARIABLE (EXAMPLE PHASE_ID = 1)

        return $next($request);
    }
}

我的前端控制器

//FrontEndController

namespace Cbcc\Http\Controllers;

use Cbcc\Page;
use Illuminate\Http\Request;

class FrontendController extends Controller
{

    public function home()
    {


        $page = Page::where([
            ['phase_id',/**** I NEED GLOBAL PHASE ID  HERE SETTING BY MIDDLEWARE***/],
            ['type','home']
        ])->get()[0];

        return view('frontend.index',compact('page'));
    }

}

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可能希望使用会话变量。那么使用flash会话变量怎么样,因为看起来你只使用这个变量一次:

<强>中间件

class ReturnPhaseMiddleware
{


    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        /**
         * TODO: Phase id check logic
         */

        $request->session()->flash('PHASE_ID', '1');

        return $next($request);
    }
}

前端控制器

class FrontendController extends Controller
{

    public function home(Request $request)
    {


        $page = Page::where([
            ['phase_id', $request->session()->get('PHASE_Id')],
            ['type','home']
        ])->get()[0];

        return view('frontend.index',compact('page'));
    }
}

flash会话变量的特殊属性是它们在下一个请求时被销毁。

参考:https://laravel.com/docs/5.4/session#flash-data

答案 1 :(得分:0)

良好的策略,没有使用会话?

您如何看待我的解决方案?

Dim A as integer    
Dim B as integer
Dim C as integer
Dim D as integer
Dim E as integer
Dim F as integer

A=1
B=2
C=3
D=4
E=5
F=6

MaxValue = Application.Max(A,B,C,D,E,F)