2013-06-05 34 views
23

Tôi đã đọc qua tài liệu Laravel 4 và đã tạo một ứng dụng demo để giúp học tập.Laravel 4 Controller Templating/Blade - Phương pháp đúng?

Tôi không thể tìm thấy nhiều tài liệu về cách tạo khuôn mặt của chế độ xem bằng lưỡi dao và bộ điều khiển. Phương pháp nào là đúng hoặc tùy theo sở thích cá nhân?

Ví dụ: 1

Controller/HomeController.php

protected $layout = 'layouts.main'; 

public function showWelcome() 
{ 
    $this->layout->title = "Page Title"; 
    $this->layout->content = View::make('welcome'); 
} 

Views/layouts/main.blade.php

<html> 
<head> 
    <title>{{ $title }}</title> 
</head> 
<body> 
    {{ $content }} 
</body> 
</html> 

Views/welcome.blade.php

<p>Welcome.</p> 

Ví dụ: 2

Controller/HomeController.php

protected $layout = 'layouts.main'; 

public function showWelcome() 
{ 
    $this->layout->content = View::make('welcome'); 
} 

Views/layouts/main.blade.php

<html> 
<head> 
    <title>@yield('title')</title> 
</head> 
<body> 
    @yield('content') 
</body> 
</html> 

Views/welcome.blade.php

@section('title', 'Welcome') 
@section('content') 
// content 
@stop 

Quy ước và/hoặc lợi thế tốt nhất của những điều trên là gì?

+0

Vui lòng sửa tôi nếu các ví dụ ở trên hoặc không đúng cách! – Mediabeastnz

Trả lời

0

Tôi đặt trước thứ hai, bởi vì nó cho thấy sự tách biệt rõ ràng hơn giữa chế độ xem và mã điều khiển của bạn. Có vẻ hợp lý hơn với tôi rằng tiêu đề sẽ là tài sản của chế độ xem nội dung thay vì kết hợp lượt xem chào mừng của bạn với tiêu đề chào mừng của bạn mỗi lần.

Cuối cùng cả hai đều chính xác và sẽ hoạt động, nhưng giải pháp thay thế thứ hai là dễ bảo trì hơn.

+0

Tôi đồng ý, đó là một trong những tôi đã tiếp tục sử dụng nhưng tôi nghĩ rằng nó có thể tốt để đặt câu hỏi này ra ở đây ... Cảm ơn. – Mediabeastnz

0

Tôi thích phương pháp thứ nhất vì một số trang web có tiêu đề được tạo động từ cơ sở dữ liệu. Thật dễ dàng để vượt qua tiêu đề bằng cách sử dụng phương pháp đầu tiên.

+0

Đúng là hầu hết nội dung có thể đến từ một cơ sở dữ liệu, nhưng tôi nghĩ bạn nên chuyển các mô hình Eloquent kết quả vào khung nhìn và đặt tiêu đề ở đó thay vì cạo tiêu đề trong bộ điều khiển của bạn. Bạn vẫn sẽ chuyển mô hình cho nội dung hoặc đặt nội dung (cũng như bất kỳ thuộc tính nào khác). – Aloys

+0

Bạn có thể đưa ra một ví dụ về ý nghĩa của bạn? – thestepafter

+0

Đây là những gì tôi đề xuất (vẫn có thể đặt cược bằng cách sử dụng IoC, nhưng điều đó không quan trọng bây giờ): http://paste.laravel.com/vre – Aloys

1

Tôi không thích một trong số chúng. Layouts có lẽ là phần kỳ lạ nhất của Laravel. Phiên bản điều khiển không thực sự có ý nghĩa; tất cả các phương pháp của bộ điều khiển sau đó yêu cầu xem đó. Phiên bản @yield là một mớ hỗn độn của boilerplate. Tôi đã tạo "bố cục cụ thể theo phương pháp" này:

public function index() 
{ 
    return View::make('layouts.main', [ 
     'layout_data' => 'sup' 
    ])->nest('content', 'welcome', [ 
     'view_data' => 'sup' 
    ]); 
} 

Tôi nghĩ rằng nó nên được đề cập trong tài liệu rằng đây là một tùy chọn.

4

tôi không lưu trữ bất kỳ thông tin bố trí trong bộ điều khiển, tôi lưu trữ nó trong giao diện thông qua

@extends('layouts.master') 

Khi tôi cần phải trả lại một cái nhìn trong bộ điều khiển tôi sử dụng:

return \View::make('examples.foo')->with('foo', $bar); 

Tôi thích cách tiếp cận này khi khung nhìn xác định bố cục nào sẽ sử dụng và không phải là bộ điều khiển - điều này có thể được tính lại.