2012-11-24 8 views
10

Nơi khái niệm tốt nhất để đặt logic dữ liệu trình đơn trong Laravel là gì. Nếu tôi sử dụng trình đơn bó, nơi để đặt nó. Trong Base_Controller tạo chức năng bổ sung hoặc một cái gì đó khác?Nơi đặt logic menu trong Laravel?

+0

"logic trình đơn" là gì? –

+0

Ví dụ: lấy các phần tử trình đơn từ DB và thêm vào bộ nhớ (nhóm) của trình đơn, để hiển thị trong chế độ xem. – Orbitum

Trả lời

24

Note: Câu trả lời này được viết cho Laravel 3 và có thể hoặc có thể không hoạt động với gần đây nhất Laravel 4


cách ưa thích của tôi trong việc tạo menu động được thực hiện bằng cách tách phần menu từ bố cục chính và tiêm dữ liệu trình đơn qua Composer của Laravel (đừng nhầm lẫn với trình quản lý gói Composer PHP, chúng là những thứ khác nhau)

<!-- layouts/default.blade.php --> 

<div id="header">Title</div> 

<div id="menu"> 
    @render('parts.menu') 
</div> 

<div id="content"></div> 
<div id="footer"></div> 

 

<!-- parts/menu.blade.php --> 

<ul> 
@foreach($menuitems as $menuitem) 
    <li>{{ $menuitem->title }}</li> 
@endforeach 
</ul> 

 

Cuối cùng chúng ta có thể tiêm biến qua nhà soạn nhạc.

<?php 

// application/routes.php 

View::composer('parts.menu', function($view){ 
    $view->with('menuitems', Menu::all()); 
}); 

Bằng cách này mọi parts/menu.blade.php được gọi, Composer sẽ chặn quan điểm và tiêm nó với $menuitems biến. Nó tương tự như sử dụng with trên return View::make('blahblah')->with('menuitems', Menu::all())

Hy vọng nó sẽ giúp :)


Sửa: Nếu bạn không muốn có logic trong routes.php bạn có thể đặt nó trong start.php và xem xét cách Jason Lewis' tách các start.php thành các tệp riêng biệt.

Tạo thư mục trong application được gọi là start và điền vào một số tệp.

+ application [DIR] 
    \-> + start [DIR] 
     |-> autoloading.php 
     |-> composers.php 
     |-> filters.php 
     \-> validation.php 

Sau đó, thêm các dòng mã vào cuối của bạn application/start.php

require __DIR__ . DS . 'start' . DS . 'autoloading.php'; 
require __DIR__ . DS . 'start' . DS . 'filters.php'; 
require __DIR__ . DS . 'start' . DS . 'composers.php'; 
require __DIR__ . DS . 'start' . DS . 'validation.php'; 

Bạn đã có ý tưởng. Đặt các hàm soạn nhạc trong composers.php.

Đọc toàn bộ bài viết tại đây: http://jasonlewis.me/article/laravel-keeping-things-organized

+0

Tôi nghĩ rằng bạn đã hợp nhất hai câu trả lời trong một câu hỏi! – Orbitum

+3

Trong các phiên bản mới, thay vì @render ('parts.menu'), hãy sử dụng @include ('parts.menu') – hugronaphor

+0

@CornelAndreev: sự khác biệt giữa hiển thị và bao gồm là gì? – akhyar

0

Cách tìm nạp dữ liệu trong một view composer và sử dụng HTML macro để tạo HTML?

Laravel thường có nhiều cách để làm việc. Điều đó nói rằng, điều này có thể là một chút áp đảo và khó hiểu ở lần.

+1

Trong tài liệu về nhà soạn nhạc xem được cho biết rằng _ "Composers thường được định nghĩa trong application/routes.php" _. Tôi sử dụng các tuyến đường chỉ để định tuyến không cho logic, là có giải pháp mà không có tuyến đường? – Orbitum

+0

Chúng không liên quan gì đến tuyến đường, bạn có thể đặt chúng ở bất cứ nơi nào bạn muốn - thường là trong tệp trợ giúp bổ sung. – Franz

+0

Ok, và nơi đặt logic này (Composer)? Trong hàm Base_Controller? Đây là câu hỏi chính của tôi. Tôi hiểu rằng có rất nhiều điều linh hoạt trong Laravel, nhưng không biết phải đặt chúng ở đâu. – Orbitum