2014-11-03 1 views
0

모든 뷰에 대해 BaseController에서 마스터 레이아웃의 헤더까지 일부 변수를 공유합니다. 이것은 지금까지 만든 모든 컨트롤러를 통해 모든 뷰에서 작동했습니다.Laravel View :: 하나의 컨트롤러에서만 정의되지 않은 변수를 공유

Undefined variable: basket_lines (View: /var/www/vhosts/lsigifts.co.uk/app/views/layouts/master.blade.php) (View: /var/www/vhosts/lsigifts.co.uk/app/views/layouts/master.blade.php) 

master.blade.php보기는 다른 페이지에이 오류를 포기하지 않습니다

는 오류가 내가 얻을 수있다.

내 BaseController : 내가 말하는 것처럼

class BaseController extends Controller { 

    public function __construct() 
    { 
    // basket stuff to share on all templates  
     // how many different products are in there? 
     $basket_lines = Cart::totalItems(true); 
     View::share('basket_lines', $basket_lines); 

     // what's the total ex vat? 
     $basket_total_exvat = number_format(Cart::total(false), 2); 
     View::share('basket_total_exvat', $basket_total_exvat);  

     // what's the total inc vat? 
     $basket_total_vat = number_format(Cart::total(), 2); 
     View::share('basket_total_vat', $basket_total_vat); 
    } 

    /** 
    * Setup the layout used by the controller. 
    * 
    * @return void 
    */ 
    protected function setupLayout() 
    { 
     if (! is_null($this->layout)) 
     { 
      $this->layout = View::make($this->layout); 
     } 
    } 

} 

이 문제없이 모든보기에 물건을 공급한다. 그러나,이 컨트롤러는 그것을 허용하지 않습니다 :

경로 :

Route::controller('search', 'SearchController'); 

SearchController : 나는 시간 동안 솔루션을 사방 보았다

class SearchController extends \BaseController { 

    /** 
    * @var The SOLR client. 
    */ 
    protected $client; 

    /** 
    * Constructor 
    **/ 
    public function __construct() 
    { 
     // get config 
     $solr_config = Config::get('solr'); 

     // create a client instance  
     $this->client = new \Solarium\Client($solr_config); 
    } 


    public function getIndex() 
    {   
     /*$ping = $this->client->createPing(); 

     try { 
      $result = $this->client->ping($ping); 
      return var_dump($result); 
     } catch (Solarium\Exception $e) { 
      return 'hmmm'; 
     }*/ 

     if(Input::has('q')){ 
      // create the query 
      $query = $this->client->createSelect(); 

      // set the string 
      $query->setQuery('%P1%', array(Input::get('q'))); 

      // execute the query 
      $resultset = $this->client->select($query); 

      // create the view 
      return View::make('search.index', [ 
       'q'   => Input::get('q'), 
       'resultset' => $resultset 
      ]); 
     } 

     return 'No search term'; 
    } 

} 

는 다른 방식으로 뷰를 만드는 시도를, 이 공유 변수에 테스트 값을 넣으려고했지만 아무 쓸모가 없습니다.

이보기와 다른보기 사이의 유일한 차이점은 get보기 (post보기가 아니라)입니다. 그러나 이것이 왜 아무 것도 바뀌지 않는 이유는 발견하지 못했습니다. Laravel docs는 "모든 뷰에서 데이터를 공유 할 수도 있습니다"라고 말합니다.

어떻게이보기에이 변수들을 공유 할 수 있습니까?

+0

바구니가 비어 있거나 설정되지 않으면 어떻게됩니까? 그게 문제가 될 수 있습니까? – Laurence

+0

비어있을 때,보기는 여전히 다른 페이지에서 작동합니다. 단지 비어 있다고 알려줍니다! –

+0

컨트롤러에서 수동으로 변수를 정의하고 뷰에 수동으로 연결하면 작동합니까? – Laurence

답변

1

SearchController의 __construct 메소드에 parent::__construct();을 추가하십시오. 그리고 모두 작동해야합니다. 처럼;

public function __construct() 
{ 

    parent::__construct(); 

    //Rest of your code 
} 
+0

답장을 보내 주셔서 감사합니다. 'public function parent :: __ construct()'를 사용하면 다음과 같은 오류가 발생합니다 :'syntax error, unexpected ':: (T_PAAMAYIM_NEKUDOTAYIM),'expecting '(''그냥 과거의 방법을 찾으려고 노력하고 있습니다. –

+0

. SearchController의 생성 메소드 내에서 라인으로 추가하십시오. –

+0

아, 세미콜론을 보지 못했습니다. 죄송합니다. 어쨌든, 나는 여전히 동일한 오류가 발생합니다. –

관련 문제