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

I have a problem with passing variable (data) to all Views. I created BaseController that extends default Laravel controller and "global" variables are defined there. When I extend other controller with BaseController i got error that variable is not defined. Does someone knows where's the problem?

Here is code:

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

     .
     .
     .
}

You are doing something wrong here. view::share() is used for sharing a piece of data across all views not controller.

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

}

You can also use a composer to share variables to views

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

}

Ideally you're going to want a combination of what you have, and the other answer posted here.

<?php

class BaseController extends Controller {
    protected $obavijesti = 'Other data';
    protected $izbornici = 'Some data';

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

Then in all of your views, you have access to the variables $obavjesti and $izbornici. Now in your other controllers, anything that extends BaseController can do the following:

class AdminController extends BaseController {

    public function index() {
        echo $this->ixbornici;
        echo $this->obavjesti;
    }
}