1

I have this route

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

My middleware check in what Phase (logic is non important now) is my application, i need that the controller setting up a global variable that i can use in all methods inside FrontendController because i need to read from database some data that depend from that check:

Middleware code, i need to set a phase_id varibale that i can use in may frontend controller.

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);
    }
}

My frontend controller

//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'));
    }

}

Any ideas to do that?

DaveIt
  • 799
  • 1
  • 8
  • 15

2 Answers2

0

You might want to user Session variables. What about using flash session variables since it seems you only use this variable once :

Middleware

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);
    }
}

Front-end controller

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'));
    }
}

The special property of flash session variables is that they get destroyed at the next request.

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

Anwar
  • 4,162
  • 4
  • 41
  • 62
0

Good strategy, and without using session?

What do you think about my solution?

// Frontend Controlller
namespace Cbcc\Http\Controllers;

use Cbcc\Lib\CheckPhaseInterface;
use Cbcc\Page;

class FrontendController extends Controller
{


    protected
        $phase_id;

    public function __construct()
    {
        $this->middleware(function ($request, $next) {


// this 2 lines return phase id logic, for example $check->run() return 1 (int)
            $check = resolve(CheckPhaseInterface::class);

            $this->phase_id = $check->run();

            return $next($request);
        });
    }

    public function home()
    {
        $page = $this->getPageContent();
        return view('frontend.index',compact('page'));
    }


    protected function getPageContent()
    {
        return Page::where([
            ['phase_id',$this->phase_id],
            ['type','home']
        ])->get()[0];
    }

}
DaveIt
  • 799
  • 1
  • 8
  • 15