View Renderer trong CodeIgniter

Sử dụng View Renderer

Hàm view() là hàm tiện lợi lấy instance của service renderer, set dữ liệu, và render ra view. Bạn cũng có thể làm việc trực tiếp hơn. Ví dụ access View service trực tiếp:

PHP
$view = \Config\Services::renderer();

Hoặc khởi tạo trực tiếp:

PHP
$view = new \CodeIgniter\View\View();

Lưu ý: chỉ nên tạo service trong controller. Nếu cần tiếp cận View class từ library, nên set như 1 dependency trong constructor của library.

Sau đó có thể sử dụng 3 hàm sau của View: render(), setVar(), setData().

Class View thực thi các mã HTML/PHP trong view, sau đó extract các tham số vào biến PHP trong file view. Do đó trong view các tham số phải là biến PHP. View sử dụng 1 array bên trong để lưu trữ các tham số cho đến khi bạn gọi hàm render(). Điều đó cũng có nghĩa là các tham số sẽ được escape.

Thiết lập các tham số cho View:

Phương thức setVar() set tham số cho view:

PHP
$view->setVar('name', 'Joe', 'html');

Phương thức setData() set nhiều tham số cùng 1 lúc:

PHP
$view->setData(['name'=> 'John', 'position' => 'Boss']);

Nối các hàm với nhau:

PHP
$view->setVar('one', $one)
    ->setVar('two', $two)
    ->render('my_view');

Escape data:

2 phương thức setVar()setData() có tùy chọn escape data để bảo mật thông qua tham số cuối cùng. Nếu không cần escape, truyền tham số là null hoặc 'raw':

PHP
$view->setVar('one', $one, 'raw');

Nếu bạn không escape data hoặc bạn truyền 1 object, bạn có thể escape bằng tay ở trong view với hàm esc():

PHP
<?= esc($object->getStart()) ?>

Các kiểu escape:

Hàm esc(), setVar(), setData() có các kiểu escape: html, js, css, url, attr. Ví dụ:

PHP
<a href="<?= esc($url, 'url') ?>" data-foo="<?= esc($bar, 'attr') ?>">Some Link</a>

<script>
    var siteName = '<?= esc($siteName, 'js') ?>';
</script>

<style>
    body {
        background-color: <?= esc('bgColor', 'css') ?>
    }
</style>

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *