2013-06-01 4 views
9

Из того, что я понимаю:Laravel 4 - понимание View :: доля()

View::share('foo','bar'); 

Сделает $ Foo доступны во всех видах.

Однако правильно ли говорить, что View::share() может использоваться только в __construct()?

Потому что извне __construct() Я не могу заставить его работать.

+0

можете ли вы поместить функцию на том, как вы использовали 'View :: share()'? – Michelle

ответ

9

View::share должно быть доступно в любом месте в вашем приложении. Обычное место, которое оно используется, - это композиторы, но оно должно использоваться в маршруте или везде, где вам это нужно.

+0

Итак, если у меня есть 'View :: share ('name', 'Steve');' внутри метода контроллера, $ name будет доступен для всех других представлений? Это просто? – user2094178

+0

Хорошо, сначала я ошибался. Я разместил в routes.php, и это уже имело эффект, который я ожидал. Я пытался из одного метода использовать другой метод с другого контроллера. – user2094178

+2

просто добавьте что-то для людей, которые ищут хороший способ сделать это ... поместите его в метод '' '__construct()' '' вашего базового контроллера. ;) –

8

Да, добавив:

View::share('foo','bar'); 

в файле routes.php составит $ Foo (со значением 'бара') доступны во всех видах. Это особенно полезно для чего-то вроде «активных» навигационных классов Twitter Bootstrap. Например, вы могли бы сделать:

View::share('navactive', ''); 

, чтобы убедиться, что navactive переменная установлена ​​во всех видах (и, следовательно, не будет бросать ошибки), а затем, когда вы делаете взгляды (в контроллере, к примеру), вы могли бы пройти:

return View::make('one')->with('navactive', 'one'); 

, а затем на ваш взгляд (желательно какой-то шаблон bootstrappy лезвия), вы можете сделать следующее:

<ul class="nav"> 
    @if (Auth::user()) 
    <li @if ($navactive === 'one') class="active" @endif><a href="{{{ URL::to('one/') }}}">One</a></li> 
    <li @if ($navactive === 'three') class="active" @endif><a href="{{{ URL::to('three/') }}}">Three</a></li> 
    <li @if ($navactive === 'five') class="active" @endif><a href="{{{ URL::to('five/') }}}">Five</a></li> 
    @endif 
</ul> 
+0

Это очень удобно! Спасибо – titleistfour

+0

Это удобно для этого. Тем не менее, вы всегда можете добавить оператор if, чтобы проверить, стоит ли '$ navactive'' isset() '. Поскольку вы упомянули навигационную маркировку, другое удобное решение будет использовать плагин, который я построил для этой цели, который можно найти здесь: https://github.com/kfirba/markNavigator – kfirba

0

в принципе, если вы хотите использовать переменные через все V Сначала вы можете создать базовый маршрут (E.x .: internalController.php) в качестве родительского класса, а затем расширить остальные контроллеры в качестве его дочернего элемента (E.x: childController.php).

И да вы, скорее всего, установить view::share('foo', $bar) в __constructor() в internalController.php, так как он обедает каждый раз, когда класс инициализируется, таким образом, родительский класс будет служить переменные значения для дочерних классов.