Yii - Lượt xem

Chế độ xem có trách nhiệm trình bày dữ liệu cho người dùng cuối. Trong các ứng dụng web,Views chỉ là các tệp kịch bản PHP chứa mã HTML và PHP.

Tạo chế độ xem

Step 1 - Hãy để chúng tôi xem xét ‘About’ xem của mẫu ứng dụng cơ bản.

<?php
   /* @var $this yii\web\View */ use yii\helpers\Html; $this->title = 'About';
   $this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-about">
   <h1><?= Html::encode($this->title) ?></h1>
   <p>
      This is the About page. You may modify the following file to customize its content:
   </p>
   <code><?= __FILE__ ?></code>
</div>

Các $this biến đề cập đến thành phần chế độ xem quản lý và hiển thị mẫu chế độ xem này.

Đây là cách ‘About’ trang trông giống như -

Điều quan trọng là phải mã hóa và / hoặc lọc dữ liệu đến từ người dùng cuối để tránh các cuộc tấn công XSS. Bạn phải luôn mã hóa một văn bản thuần túy bằng cách gọiyii\helpers\Html::encode() và nội dung HTML bằng cách gọi yii\helpers\HtmlPurifier.

Step 2 - Sửa đổi ‘About’ Xem theo cách sau.

<?php
   /* @var $this yii\web\View */ use yii\helpers\Html; use yii\helpers\HtmlPurifier; $this->title = 'About';
   $this->params['breadcrumbs'][] = $this->title;
?>
<div class="site-about">
   <h1><?= Html::encode($this->title) ?></h1>
   <p>
      This is the About page. You may modify the following file to customize its content:
   </p>
   <p>
      <?= Html::encode("<script>alert('alert!');</script><h1>ENCODE EXAMPLE</h1>>") ?>
   </p>
   <p>
      <?= HtmlPurifier::process("<script>alert('alert!');</script><h1> HtmlPurifier EXAMPLE</h1>") ?>
   </p>
   <code><?= __FILE__ ?></code>
</div>

Step 3 - Bây giờ gõ http://localhost:8080/index.php?r=site/about. Bạn sẽ thấy màn hình sau.

Lưu ý rằng mã javascript bên trong Html::encode()chức năng được hiển thị dưới dạng văn bản thuần túy. Điều tương tự đối vớiHtmlPurifier::process()gọi. Chỉ thẻ h1 đang được hiển thị.

Chế độ xem tuân theo các quy ước sau -

  • Chế độ xem, được hiển thị bởi bộ điều khiển, nên được đưa vào @app/views/controllerID thư mục.

  • Các chế độ xem, được hiển thị trong một tiện ích con, nên được đưa vào widgetPath/views folder.

Để kết xuất một view within a controller, bạn có thể sử dụng các phương pháp sau:

  • render() - Hiển thị một dạng xem và áp dụng một bố cục.

  • renderPartial() - Hiển thị chế độ xem mà không có bố cục.

  • renderAjax() - Hiển thị một dạng xem mà không có bố cục, nhưng chèn tất cả các tệp js và css đã đăng ký.

  • renderFile() - Hiển thị chế độ xem trong một đường dẫn tệp nhất định hoặc bí danh.

  • renderContent() - Hiển thị một chuỗi tĩnh và áp dụng một bố cục.

Để kết xuất một view within another view, bạn có thể sử dụng các phương pháp sau:

  • render() - Hiển thị chế độ xem.

  • renderAjax() - Hiển thị một dạng xem mà không có bố cục, nhưng chèn tất cả các tệp js và css đã đăng ký.

  • renderFile() - Hiển thị chế độ xem trong một đường dẫn tệp nhất định hoặc bí danh.

Step 4 - Bên trong thư mục views / site, tạo hai tệp chế độ xem: _part1.php and _part2.php.

_part1.php -

<h1>PART 1</h1>

_part2.php -

<h1>PART 2</h1>

Step 5 - Cuối cùng, kết xuất hai khung nhìn mới tạo này bên trong ‘About’ Lượt xem.

<?php
   /* @var $this yii\web\View */
   use yii\helpers\Html;
   $this->title = 'About'; $this->params['breadcrumbs'][] = $this->title; ?> <div class="site-about"> <h1><?= Html::encode($this->title) ?></h1>
   <p>
      This is the About page. You may modify the following file to customize its content:
   </p>
   <?= $this->render("_part1") ?> <?= $this->render("_part2") ?>
   <code><?= __FILE__ ?></code>
</div>

Bạn sẽ thấy kết quả sau:

Khi hiển thị một dạng xem, bạn có thể xác định dạng xem bằng cách sử dụng tên dạng xem hoặc đường dẫn / bí danh tệp dạng xem. Tên chế độ xem được giải quyết theo cách sau:

  • Tên chế độ xem có thể bỏ qua phần mở rộng. Ví dụ: khung nhìn about tương ứng với tệp about.php.

  • Nếu tên chế độ xem bắt đầu bằng “/”, thì nếu mô-đun hiện đang hoạt động là diễn đàn và tên chế độ xem là nhận xét / bài đăng, đường dẫn sẽ là @ app / modules / forum / views / comment / post. Nếu không có mô-đun nào hoạt động, đường dẫn sẽ là @ app / views / comment / post.

  • Nếu tên chế độ xem bắt đầu bằng “//”, đường dẫn tương ứng sẽ là @ app / views / ViewName. Ví dụ: // site / contact tương ứng với @ app / views / site / contact.php.

  • Nếu tên chế độ xem là liên hệ và bộ điều khiển ngữ cảnh là SiteController, thì đường dẫn sẽ là @ app / views / site / contact.php.

  • Nếu chế độ xem giá được hiển thị trong chế độ xem hàng hóa, thì giá sẽ được giải quyết dưới dạng @ app / views / bill / price.php nếu nó đang được hiển thị trong @ app / views / bill / goods.php.

Truy cập dữ liệu trong chế độ xem

Để truy cập dữ liệu trong một chế độ xem, bạn nên chuyển dữ liệu làm tham số thứ hai cho phương thức kết xuất chế độ xem.

Step 1 - Sửa đổi actionAbout sau đó SiteController.

public function actionAbout() {
   $email = "[email protected]"; $phone = "+78007898100";
   return $this->render('about',[ 'email' => $email,
      'phone' => $phone
   ]);
}

Trong đoạn mã được đưa ra ở trên, chúng tôi chuyển hai biến $email$phone để hiển thị trong About lượt xem.

Step 2 - Thay đổi mã xem giới thiệu.

<?php
   /* @var $this yii\web\View */
   use yii\helpers\Html;
   $this->title = 'About'; $this->params['breadcrumbs'][] = $this->title; ?> <div class = "site-about"> <h1><?= Html::encode($this->title) ?></h1>
   <p>
      This is the About page. You may modify the following file to customize its content:
   </p>
   <p>
      <b>email:</b> <?= $email ?> </p> <p> <b>phone:</b> <?= $phone ?>
   </p>
   <code><?= __FILE__ ?></code>
</div>

Chúng tôi vừa thêm hai biến mà chúng tôi nhận được từ SiteController.

Step 3 - Nhập URL http://localhost:8080/index.php?r=site/about trong trình duyệt web, bạn sẽ thấy như sau.