Laravel 5.1 : Passing Data to View Composer

前端 未结 3 573
天命终不由人
天命终不由人 2021-02-06 15:20

I\'m using view composers in Laravel 5.1: nice. But how can I pass parameters to a view composer?

In my case I send week info (previous, current, next week, inc

相关标签:
3条回答
  • 2021-02-06 15:45

    All the data you pass to your view in the controller will be available in the view controller. Use the getData method on the view instance like this:

    $view->getData()["current_week"];
    

    In your particular case, you can do this:

    public function compose(View $view)
    {
       $current_week = $view->getData()["current_week"];
       //use $current_week as desired 
    }
    

    You can also get the data in the route (route parameters) from the request like this:

    request()->route()->getParameter('week_number');
    
    0 讨论(0)
  • 2021-02-06 15:57

    I think if you want to pass some data to the view composer from controller then you can use sessions. Set the data from the controller in the session and you can get data from session in the view composer. This did the trick for me without doing any complex stuff

    Controller

        public function index()
        {
           session(['key' => 'value']);
           return view('your_view');
        }
    

    View Composer

        public function compose(View $view)
        {
            $data = session('key');
            return $view->with('your_data',$data);
        }
    
    0 讨论(0)
  • 2021-02-06 16:03

    If you have to pass parameters from a controller to a view composer, you can create a wrapper class for the composer and pass data to it whenever needed. Then, when you're done setting up you data, you can compose the view:

    ComposerWrapper class

    public function __construct(array $data)
    {
        $this->data = $data;
    }
    
    public function compose()
    {        
        $data = $this->data;
    
        View::composer('partial_name', function( $view ) use ($data) 
        {
            //here you can use your $data to compose the view
        } );
    }
    

    Controller

    public function index()
    {
        //get the data you need
        $data = ['first_value' = 1]; 
    
        //pass the data to your wapper class
        $composerWrapper = new ComposerWrapper( $data );
    
        //this will compose the view
        $composerWrapper->compose();
    
       //other code...
    }
    
    0 讨论(0)
提交回复
热议问题