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?
Trả lời
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
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
Trong các phiên bản mới, thay vì @render ('parts.menu'), hãy sử dụng @include ('parts.menu') – hugronaphor
@CornelAndreev: sự khác biệt giữa hiển thị và bao gồm là gì? – akhyar
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.
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
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
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
"logic trình đơn" là gì? –
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