2014-01-05 7 views
0

Я пытаюсь перейти от CodeIgniter к Laravel для нового приложения. В CodeIgniter я сделал что-то похожее на следующее: он не работает, как я ожидаю в Laravel. У меня есть следующий код, как мой BaseController в Laravel 4:Laravel 4 Общие активы

class BaseController extends Controller { 
    private $css_files = array('bootstrap3.min.css'); 
    private $js_files = array(); 

    protected function setupLayout() 
    { 
     if (! is_null($this->layout)) 
     { 
      $this->layout = View::make($this->layout) 
         ->with('css_files',$this->get_css()) 
         ->with('js_files',$this->get_js()); 
     } 
    } 

    private function get_css(){ 
     return $this->css_files; 
    } 

    public function add_css($css_file){ 
     $this->css_files[] = $css_file; 
    } 

    private function get_js(){ 
     return $this->js_files; 
    } 

    public function add_js($js_file){ 
     $this->js_files[] = $js_file; 
    } 

} 

И я стараюсь, чтобы иметь возможность добавлять JS и CSS активов динамически:

class LoginController extends BaseController { 
    protected $layout = 'layouts.main'; 

    public function index(){ 
     $this->add_css('login.css'); 

     $this->layout->content = View::make('auth.login'); 
    } 
} 

Просмотр Код:

<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>APP NAME</title> 
    @foreach($css_files as $css) 
     {{ HTML::style("css/{$css}") }} 
    @endforeach 
</head> 

Если я делаю методы доступа общедоступными и вызываю их из LoginController, они показывают добавленные файлы css, как ожидалось.
Если я добавлю имя файла login.css в массив файлов css напрямую, как загрузочный css, он работает так, как ожидалось.

Что я делаю неправильно, что приводит к тому, что файлы css не отображаются с BaseController на LoginController? Неужели я ошибаюсь? Заранее благодарим за помощь!

ответ

0

setupLayout() будет вызываться перед вашим LoginController. Таким образом, ссылка на $ this-> css_files будет содержать только загрузочный CSS-файл.

К (hackily) обойти это, передать CSS и JS массивы по ссылке, например, так:

$this->layout = View::make($this->layout) 
    ->with('css_files', &$this->css_files) 
    ->with('js_files', &$this->js_files); 
+0

Спасибо за информацию о процессе вызывающего порядке, но когда я попробовал это, я получил следующий ошибка: синтаксическая ошибка, неожиданный '&' – Gorving

+0

Извинения, я отредактировал свой ответ. Синтаксическая ошибка связана с невозможностью вернуть ссылку. – jedifans

Смежные вопросы