Views
Views là những file mà chứa những thông tin thể hiện của ứng dụng . phần lớn view sẽ bao gồm HTML, CSS và Javascript nhưng cũng có thể là XML hay JSON cho AJAX. Mục đích của View là làm sao giữ thông tin của ứng dụng tách biệt ra với ứng dụng nhằm sau này tùy chỉnh hoặc tối ưu code tốt hơn.
Views bản thân nó chứa code hiển thị dữ liệu mà người lập trình muốn đưa ra. ví dụ, Đưa thông tin của 1 mảng các hàng hóa mà mỗi hàng hóa lại là một bảng thông tin . Nếu thực hiện kiểu bình thường thì giao diện sẽ rất rối. nhưng với view có thể lồng view của chi tiết sản phẩm một cách dễ dàng. Views vẫn là tập tin PHP vì thế bạn có thể viết như cách thông thường. tuy nhiên , bạn nên tạo view một cách chi tiết có thể để thể hiện dữ liệu từ controller gửi đến.
Tạo View
thôi thì bắt đầu tạo view đi chứ nói nhiều quá mất hay
Các tập tin của View được lưu trong thư mục views
trong bộ code. tập tin này có phần đuôi là .php. Bạn có thể tạo các thư mục con là những view con khác nhau trong thư mục này luôn để tổ chức quản lý các file view riêng.Ví dụ như sau:
APPPATH/views/home.php //các view chính APPPATH/views/pages/about.php // Các view dạng trang APPPATH/views/products/details.php //các view của sản phẩm MODPATH/error/views/errors/404.php //các view báo lỗi |
tải Views
Đối tượng View sẽ được tạo bên trong Controller sử dụng phương thức View::factory . View sẽ được khỏi tạo thông qua thuộc tính Request::$response hay những View khác. ví dụ sau là tải 1 view chi tiết sản phẩm
public function action_about() { $this ->request->response = View::factory( ' products/details' ); } |
Khi một view được khỏi tạo bằng Request::$response, nó sẽ được render khi cần thiết. để render kết quả của View cần dùng phương thức View::render hay chỉ đống vai trò như một string.khi view được render, thì tập tin view được tải và sinh ra HTML tương ứng.
public function action_index() { $view = View::factory( ' products/details' ); // Render the view $detail_product = $view ->render(); // Or just type cast it to a string $ detail_product = (string) $view ; $this ->request->response = $ detail_product; } |
Biến trong Views
Khi một View được tải, Biến được khởi tạo để sử dụng trong phương thức View::set và View::bind .
public function action_roadtrip() { $view = View::factory( 'user/roadtrip' ) ->set( 'places' , array ( 'Rome' , 'Paris' , 'London' , 'New York' , 'Tokyo' )); ->bind( 'user' , $this ->user); // The view will have $places and $user variables $this ->request->response = $view ; } |
sự khác nhau duy nhất giữa set()
và bind()
là bind()
khởi tạo biến reference (tham khảo). nếu trong bind()
có một biến trước đó đã được định nghĩa ,thì biến sẽ được tạo với giá trị NULL
.
bạn cũng có thể khởi tạo biến bằng cách gán trực tiếp cho đối tượng View. Nó chỉ định gọi phương thức set()
;
public function action_roadtrip() { $view = View::factory( 'user/roadtrip' ); $view ->places = array ( 'Rome' , 'Paris' , 'London' , 'New York' , 'Tokyo' ); $view ->user = $this ->user; // The view will have $places and $user variables $this ->request->response = $view ; } |
Biến toàn cục
Một ứng dụng có thể có nhiều tập tin view mà cần truy xuất đến cùng một số biến. Ví dụ như để thể hiện tiêu đề của trang cả ở header của template và trong thân của nội dung trang (page content). Bạn có thể tạo những biết mà có thể truy xuất trong bất kỳ view thì sử dụng phương thức View::set_global và View::bind_global
// Assign $page_title to all views View::bind_global( 'page_title' , $page_title ); |
Nếu ứng dụng có 3 view được render cho trang chủ (home page) template
, template/sidebar
, và pages/home
. thì đầu tiền abstract controller tạo template sẽ được tạo
If the application has three views that are rendered for the home page: template
, template/sidebar
, andpages/home
. First, an abstract controller to create the template will be created:
abstract class Controller_Website extends Controller_Template { public $page_title ; public function before() { parent::before(); // Make $page_title available to all views View::bind_global( 'page_title' , $this ->page_title); // Load $sidebar into the template as a view $this ->template->sidebar = View::factory( 'template/sidebar' ); } } |
tiếp theo thì home controller sẽ kế thừa từ Controller_Website
:
class Controller_Home extends Controller_Website { public function action_index() { $this ->page_title = 'Home' ; $this ->template->content = View::factory( 'pages/home' ); } } |
View cùng với view
Nếu như bạn muốn kết hợp view này với những view khác, thì có 2 lựa chọn. Bằng cách gọi View::factory bạn có thể ???(sandbox) với view kết hợp ấy. Nghĩa là bạn sẽ ophai3 cung cấp tất cả các biến đến view bằng cách sử dung View::set hay View::bind:
// In your view file: // Only the $user variable will be available in "views/user/login.php" <?php echo View::factory( 'user/login' )->bind( 'user' , $user ) ?> |
Tùy chọn khác cho việc kết hợp view trực tiếp là tạo tất cả các biến cùng 1 view
// In your view file: // Any variable defined in this view will be included in "views/message.php" <?php include Kohana::find_file( 'views' , 'user/login' ) ?> |
Bạn cũng có thể khởi tạo biến từ view cha cho view con trong cùng một conttroller, Ví dụ:
// In your controller: public functin action_index() { $view = View::factory('common/template); $view ->title = "Some title" ; $view ->body = View::factory( 'pages/foobar' ); } // In views/common/template.php: <html> <head> <title><?php echo $title ></title> </head> <body> <?php echo $body ?> </body> </html> |
Và tất nhiên bạn cũng có thể tải Tất cả Request cùng với view:
<?php echo Request::factory( 'user/login' )->execute() ?> |
đây là một ví dụ của [HMVC], nó có thể được tạo để gỏi từ các URLs khác trong ứng dụng .
Lược dịch từ http://kohanaframework.org/3.0/guide/kohana/mvc/views