Laravel 5 无法将变量传递给所有视图

jur*_*pro 3 php laravel laravel-5

我在将变量(数据)传递给所有视图时遇到问题。我创建了 BaseController 来扩展默认的 Laravel 控制器,并在那里定义“全局”变量。当我使用 BaseController 扩展其他控制器时,出现变量未定义的错误。有人知道问题出在哪里吗?

这是代码:

namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Sentry;
use Illuminate\Http\Request;
use View;

class BaseController extends Controller {
    public function __construct() {
        $obavijesti="Other data";
        $izbornici="Some data";
        View::share ( 'izbornici', $izbornici );
        View::share ( 'obavjesti', $obavjesti );
        }
   }

class AdminController extends BaseController {
     .
     .
     .
      echo '<pre>';var_dump($izbornici);echo '</pre>';//Error pop ups here

     .
     .
     .
}
Run Code Online (Sandbox Code Playgroud)

Eme*_*bah 5

你在这里做错了什么。view::share() 用于在所有视图而不是控制器之间共享一条数据。

namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Sentry;
use Illuminate\Http\Request;
use View;

//If you wish to get these variables in your other controllers you do this:

class BaseController extends Controller {

    public $obavijesti="Other data";
    public $izbornici="Some data";

    public function __construct() {
       View::share ( 'izbornici', $this->izbornici );
       View::share ( 'obavjesti', $this->obavjesti );
    }  

}

class AdminController extends BaseController {

    //if you have a constructor in other controllers you need call constructor of parent controller (i.e. BaseController) like so:

    public function __construct(){
       parent::__construct();
    }

    public function Index(){
      echo $this->obavijesti;
    }

}
Run Code Online (Sandbox Code Playgroud)

您还可以使用编写器将变量共享到视图

//1. Create a composer file at app\Composers\AdminComposer.php
//NB: create "app\Composers" if does not exists

//2. Inside AdminComposer.php add this.


<?php namespace App\Composers;

class AdminComposer
{
    public function __construct()
    {

    }

    public function compose($view)
    {
        //Add your variables
        $view->with('izbornici',      'Other data')
            ->with('obavjesti',       'Some other data');
    }
}

//3. In you controller do this:

<?php namespace App\Http\Controllers;
//NB: I removed your BaseController because I believe the issue is coming from //there

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Sentry;
use Illuminate\Http\Request;
use View;

class AdminController extends Controller{


    public function __construct(){
        //Lets use AdminComposer to share variables to adminpage.blade.php view

        View::composers([
            'App\Composers\AdminComposer'  => array('adminpage')
        ]);

    }

    public function Index(){
        return view('adminpage');
    }

}
Run Code Online (Sandbox Code Playgroud)