2013-06-01 37 views
9

Từ những gì tôi hiểu:Laravel 4 - hiểu biết Xem :: phần()

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

sẽ làm cho $ foo có sẵn trong tất cả các quan điểm.

Tuy nhiên, có đúng không khi chỉ nói View::share() chỉ có thể được sử dụng trong __construct()?

Vì từ bên ngoài __construct() Tôi không thể làm cho nó hoạt động.

+0

bạn có thể đặt chức năng về cách bạn đã sử dụng 'Xem :: chia sẻ()' không? – Michelle

Trả lời

9

View::share sẽ có sẵn ở bất kỳ đâu trong ứng dụng của bạn. Một nơi phổ biến mà nó được sử dụng là trong các nhà soạn nhạc xem, nhưng nó có thể sử dụng được trong một tuyến đường hoặc bất cứ nơi nào bạn cần nó.

+0

Vì vậy, nếu tôi có 'View :: share ('name', 'Steve');' bên trong phương thức của controller, $ name sẽ có sẵn cho tất cả các view khác? Chỉ là vậy thôi? – user2094178

+0

Ok, ban đầu tôi đã nhầm. Tôi đặt trong routes.php và nó đã có hiệu ứng tôi mong đợi. Tôi đã cố gắng từ bên trong một phương pháp duy nhất đến phương pháp khác từ bộ điều khiển khác. – user2094178

+2

chỉ để thêm một cái gì đó cho những người tìm kiếm một cách tốt để làm điều này ... đặt nó bên trong '' '__construct()' '' phương pháp của bộ điều khiển cơ sở của bạn. ;) –

8

Vâng, nói thêm:

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

trong tập tin routes.php của bạn sẽ làm cho $ foo (với một giá trị của 'bar') có sẵn trong tất cả các quan điểm. Điều này đặc biệt hữu ích cho những thứ như các lớp điều hướng "hoạt động" của Twitter Bootstrap. Ví dụ, bạn có thể làm:

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

để đảm bảo biến navactive được thiết lập trong tất cả các quan điểm (và do đó sẽ không ném lỗi) và sau đó khi bạn đang làm cho quan điểm (trong điều khiển của bạn, ví dụ), bạn có thể vượt qua:

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

và sau đó theo quan điểm của mình (tốt nhất là một số mẫu bootstrappy lưỡi), bạn có thể làm như sau:

<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

Điều này khá tiện dụng! Cảm ơn – titleistfour

+0

Đó là cách sử dụng tiện dụng cho điều đó. Tuy nhiên, bạn luôn có thể thêm câu lệnh if để kiểm tra nếu '$ navactive'' isset() '. Vì bạn đã đề cập đến việc đánh dấu điều hướng, một giải pháp tiện dụng khác sẽ sử dụng một plugin mà tôi đã xây dựng cho mục đích đó có thể tìm thấy ở đây: https://github.com/kfirba/markNavigator – kfirba

0

về cơ bản nếu bạn muốn chia sẻ các biến qua tất cả v iew, trước tiên bạn có thể muốn tạo tuyến đường cơ sở (E.x .: internalController.php) làm lớp cha, sau đó mở rộng các bộ điều khiển khác dưới dạng con của nó (E.x: childController.php).

Và có thể bạn sẽ đặt view::share('foo', $bar) trong số __constructor() trong số internalController.php, vì bữa trưa sẽ bất cứ khi nào lớp được khởi tạo, cách này lớp cha sẽ phân phối giá trị biến cho lớp con.