PageRenderTime 48ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/docs/guide-vi/start-hello.md

https://gitlab.com/brucealdridge/yii2
Markdown | 139 lines | 99 code | 40 blank | 0 comment | 0 complexity | 46f99f4c32751d46668df453041c7dc4 MD5 | raw file
  1. Bắt đầu ứng dụng với lời chào Hello
  2. ============
  3. Phần này sẽ tả làm thế nào để tạo ra một trang Web mới trong ứng dụng của bạn cùng với lời chào "Hello".
  4. Để đạt được mục tiêu này. bạn sẽ cần tạo mới một [action](structure-controllers.md#creating-actions)
  5. một [view](structure-views.md):
  6. * Ứng dụng sẽ gửi đi các request từ trang Web để tới các action
  7. * action sẽ tạo mới View để hiển thị lời chào "Hello" tới user.
  8. Thông qua bài hướng dẫn này, bạn sẽ nắm vững ba điều:
  9. 1. Làm thế nào để tạo ra một [action](structure-controllers.md) để đáp ứng các requests,
  10. 2. Làm thế nào để tạo ra [view](structure-views.md) để xây dựng nội dung các thông điệp,
  11. 3. Cách ứng dụng gửi đi các request tới các [actions](structure-controllers.md#creating-actions).
  12. Tạo Action <span id="creating-action"></span>
  13. ------------------
  14. Với nhiệm vụ tạo ra thông điệp "Hello", bạn sẽ tạo một [action](structure-controllers.md#creating-actions) `say`, action này
  15. sẽ lấy các tham số `message` từ request hiển thị thông điệp trở lại user. Nếu request không cung cấp tham số `message`,
  16. action sẽ mặc định hiển thị thông điệp "Hello".
  17. > Lưu ý: [Hành động (Actions)](structure-controllers.md#creating-actions) người dùng cuối thể truy cập các đối tượng thực hiện trực tiếp.
  18. Các Actions được nằm trong [bộ điều khiển (controllers)](structure-controllers.md).
  19. Các kết quả của một action người sử dụng cuối cùng nhận được các thông điệp.
  20. Các Actions cần phải được khai báo [controllers](structure-controllers.md). Để cho đơn giản, bạn thể khai báo
  21. action `say` controller `SiteController`. Controller này được khai báo trong
  22. lớp `controllers/SiteController.php`. Action mới cần tạo nằm đoạn code sau:
  23. ```php
  24. <?php
  25. namespace app\controllers;
  26. use yii\web\Controller;
  27. class SiteController extends Controller
  28. {
  29. // ...existing code...
  30. public function actionSay($message = 'Hello')
  31. {
  32. return $this->render('say', ['message' => $message]);
  33. }
  34. }
  35. ```
  36. Trong đoạn code trên, action `say` đinh nghĩa phương thức tên `actionSay` nằm trong lớp `SiteController`.
  37. Yii sử dụng tiền tố `action` để phân biệt các phương thức thuộc action từ các phương thức không phải action trong một lớp điều khiển.
  38. Tên nằm sau `action` tiền tố ánh xạ tới các action's ID.
  39. Để hiểu được quy tắc đặt tên cho actions, Bạn nên hiểu cách hoạt động Yii xử với các action IDs. Mỗi Action IDs luôn luôn những tự
  40. thường. Nếu action ID đòi hỏi nhiều từ, chúng ta sẽ nối những từ đó bằng dấu gạch ngang ( dụ, `create-comment`). Tên phương thức của action
  41. sẽ được ánh xa tới action IDs bởi loại bỏ bất kỳ dấu gạch ngang từ IDs, dấu gạch ngang được thêm vào từ chữ cái in hoa đầu tiên trong mỗi từ, từ đứng trước `action`. dụ,
  42. với action ID `create-comment` tương ứng tới action phương thức tên `actionCreateComment`.
  43. Trong dụ này, phương thức của action nhận tham số `$message`, mặc đinh giá trị `"Hello"` (Như việc bạn thể thiết
  44. lập các giá trị mặc định cho bất kỳ tham số cho các hàm hoặc phương thức trong PHP). Mỗi khi ứng dụng
  45. nhận request xác đinh action chịu trách nhiệm cho xử các yêu cầu action `say` , ứng dung
  46. sẽ lưu trữ tham số này cùng với tên tham số được tìm thấy trong request. Nói cách khác, nếu request bao gồm
  47. tham số `message` theo cùng với giá trị `"Goodbye"`, biến `$message` tương ứng trong action sẽ được gán giá trị.
  48. Phương thức [[yii\web\Controller::render()|render()]] nằm trong mỗi action được gọi để trả về một [view](structure-views.md)
  49. tên `say`. Tham số `message` luôn luôn được gửi qua view để xem được dùng hay không. Kết quả việc render được
  50. thực hiện trong mỗi action. Ứng dụng sẽ nhận kết quả này hiển thị tới user trên trình duyệt (như một trang HTML đầy đủ).
  51. Tạo mới View <span id="creating-view"></span>
  52. ---------------
  53. [Views](structure-views.md) đảm nhận việc hiển thị thông tin tương tác với người dùng. Để thực hiện yêu câu hiển thị
  54. lời chào "Hello", bạn cần phải tạo một view `say` chức năng hiển thị tham số `message`, tham số này được nhận từ action gửi đến:
  55. ```php
  56. <?php
  57. use yii\helpers\Html;
  58. ?>
  59. <?= Html::encode($message) ?>
  60. ```
  61. Bạn cần lưu trữ view `say` nằm đường dẫn `views/site/say.php`. Mỗi khi phương thức [[yii\web\Controller::render()|render()]]
  62. được gọi action, sẽ tìm kiếm tập tin PHP nằm đường dẫn `views/ControllerID/ViewName.php`.
  63. Lưu ý rằng, đoạn code trên, biến `message` đã được phương thức [[yii\helpers\Html::encode()|HTML-encoded]]
  64. hóa trước khi được in ra. Việc hóa cần thiết khi gửi các tham số tới user, các tham số này thể bị tấn công qua
  65. [XSS (cross-site scripting)](http://en.wikipedia.org/wiki/Cross-site_scripting) đây là kỹ thuật tấn công bằng cách chèn chèn các
  66. thẻ HTML hoặc đoạn JavaScript độc hại.
  67. Tất nhiên, bạn thể thêm các nội dung view `say`.Nội dung bao gồm các thẻ HTML, dữ liệu văn bản, cũng thể các câu lệnh PHP.
  68. Trên thực tế, view `say` chỉ các đoạn PHP được thực thi bởi phương thức [[yii\web\Controller::render()|render()]].
  69. Nội dung được gửi ra từ view sẽ được gửi tới ứng dụng (application) như những phản hồi kết quả.
  70. Sau đó ứng dụng sẽ gửi kết quả tới user.
  71. Trying it Out <span id="trying-it-out"></span>
  72. -------------
  73. Sau khi đã tạo action view, bạn thể truy cập vào trang bởi việc truy cập vào URL sau:
  74. ```
  75. http://hostname/index.php?r=site/say&message=Hello+World
  76. ```
  77. ![Hello World](images/start-hello-world.png)
  78. URL này sẽ trả về một trang hiển thị lời chào "Hello World". Trang này cùng phần header footer như những trang khác trong ứng dụng.
  79. Nếu bạn không nhập tham số `message` vào URL, bạn chỉ xem thấy mỗi dòng "Hello" được hiển thị. Bởi tham số `message` được thông qua phương thức `actionSay()`, mỗi khi tham số này không được nhập,
  80. thì giá trị mặc đinh `"Hello"` sẽ được thay thế.
  81. > Lưu ý: Trang này cùng phần header footer như những trang khác bởi phương thức [[yii\web\Controller::render()|render()]]
  82. sẽ tự động nhúng nội dung của view `say` vào một [layout](structure-views.md#layouts) layout này nằm `views/layouts/main.php`.
  83. Tham số `r` trên URL sẽ được giải thích thêm. chuẩn cho bộ định tuyến [route](runtime-routing.md), mỗi ứng dụng sẽ cung cấp ID
  84. tương ứng với từng action. Với các đinh dạng router `ControllerID/ActionID`. Khi ứng dụng nhận request, ứng dụng sẽ kiểm tra các tham số
  85. theo cùng request đó, sử dụng `ControllerID` để xác định lớp điều khiển để xử các request. Sau đó, bộ điều khiển sẽ
  86. xác dịnh `ActionID` cần được khởi tạo để xử công việc. Trong dụ này, route `site/say`
  87. sẽ gán (ám chỉ tới) bộ điều khiển `SiteController` action `say`. Điều này sẽ kết quả , phương thức `SiteController::actionSay()` sẽ được gọi để xử các request.
  88. > Lưu ý: Giống như actions, ứng dụng sử dụng các định danh ID để nhận diện các controller. Các Controller ID
  89. quy tắc đặt tên giống với các action IDs. Tên của controller được chuyển đổi từ các controller IDs
  90. bằng việc loại bỏ dấu gạch ngang từ đinh danh ID, tận dụng các chữ cái đầu tiên trong mỗi từ,
  91. từ đứng trước `Controller`. dụ, bộ điều khiển controller ID tên `post-comment` sẽ tương ứng
  92. với controller `PostCommentController`.
  93. Tổng kết <span id="summary"></span>
  94. -------
  95. Qua phần này, bạn đã thao tác với phần controller view nằm trong mẫu thiết kế MVC.
  96. Bạn đã tạo một action thuộc phần của controller để xử các request . bạn cũng đã tạo được view cho việc
  97. hoàn thành nội dung trong thông điệp trả về . Trong dụ đơn giản này, không model được sử dụng để thao tác dữ liệu chỉ sử dụng tham số `message`.
  98. Bạn cũng đã học được router trong Yii, cái vai trò quan trọng trong việc thiết lập kết nối giữa user các controller actions.
  99. Trong phần tiếp , bạn sẽ tìm hiểu cách tạo một model, thêm mới các trang chứa HTML form.