PageRenderTime 37ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/userguide/guide/zh-cn/about.controllers.md

https://bitbucket.org/alvinpd/monsterninja
Markdown | 102 lines | 76 code | 26 blank | 0 comment | 0 complexity | 6921f2c73a422bfed79dd385f7909d89 MD5 | raw file
  1. # 控制器
  2. 控制器模型和视图是程序的组成部分控制器把改变的数据的信息传递模型或者从模型获取信例如数据库对数据的插入更新和删除数据控制器通过模型传递信息并传给视图视图是用户的最终呈现
  3. 控制器也可以当作 URL详情请参见 [URLs and Links](start.urls)
  4. ## 控制器命名和解析
  5. 控制器的类名必须和文件名保持一致
  6. **控制器约定**
  7. * 控制器的文件名必须全部小写比如 `articles.php`
  8. * 全部放置在 **classes/controller** 或其子目录下面比如 `classes/controller/articles.php`
  9. * 控制器类必须同文件名一致的前提下首字母大写且使用 **Controller_** 做前缀比如 `Controller_Articles`
  10. * 控制器类必须继承 Controller 类做父类
  11. * 所有 URI 映射的控制器方法必须添加 **action_** 前缀比如 `action_do_something()`
  12. ### 一个简单的控制器
  13. 首先我们先创建一个简单的控制器它可以输出 Hello World 到屏幕上面
  14. **application/classes/controller/article.php**
  15. ~~~
  16. <?php defined('SYSPATH') OR die('No direct access allowed.');
  17. class Controller_Article extends Controller
  18. {
  19. public function action_index()
  20. {
  21. echo 'Hello World!';
  22. }
  23. }
  24. ~~~
  25. 完成上面代码之后在浏览器敲入 yoursite.com/article或没有使用 URL 重写的地址 yoursite.com/index.php/article你就能看到
  26. ~~~
  27. Hello World
  28. ~~~
  29. 这个控制器就是这么简单里面包含了上面所提到的所有约定
  30. ### 高级控制器
  31. 在上面的例子中访问 yoursite.com/article URL 第二个分段为空是执行的 `index()` 方法yoursite.com/article/index
  32. _如果 URL 的第二个分段不为空它会调用其控制器所对应的方法函数_
  33. **application/classes/controller/article.php**
  34. ~~~
  35. class Controller_Article extends Controller
  36. {
  37. public function action_index()
  38. {
  39. echo 'Hello World!';
  40. }
  41. public function action_overview()
  42. {
  43. echo 'Article list goes here!';
  44. }
  45. }
  46. ~~~
  47. 如果在浏览器敲入 yoursite.com/article/overview 你可以看到
  48. ~~~
  49. Article list goes here!
  50. ~~~
  51. ### 带参数的控制器
  52. 那么如果想显示指定的文章怎么办比方说我们要显示一篇名为 `your-article-title` 的文章而这篇文章的 id `1`
  53. 实现这个就好像是这样的 yoursite.com/article/view/**your-article-title/1**,最后的两个分段即使通过调用 view() 方法里面的两个参数实现的。
  54. **application/classes/controller/article.php**
  55. ~~~
  56. class Controller_Article extends Controller
  57. {
  58. public function action_index()
  59. {
  60. echo 'Hello World!';
  61. }
  62. public function action_overview()
  63. {
  64. echo 'Article list goes here!';
  65. }
  66. public function action_view($title, $id)
  67. {
  68. echo $id . ' - ' . $title;
  69. // you'd retrieve the article from the database here normally
  70. }
  71. }
  72. ~~~
  73. 如果在浏览器敲入 yoursite.com/article/view/**your-article-title/1** 你可以看到:
  74. ~~~
  75. 1 - your-article-title
  76. ~~~