文章出處

一. 控制器操作

我們首先復習一下基本的控制器定義和方法執行方式。
第一步:控制器默認創建在當前模塊下的 Controller 目錄下;
第二步:按照指定的命名規則:控制器名(首字母大寫)+Controller.class.php;
第三步:控制器里的方法必須是 public 公共的;

1 //控制器
2 class UserController s extends Controller {
3 public n function index() {
4 //index()方法在URL訪問時可以忽略
5   }
6 }
 URL 訪問: http://localhost/demo39/User/index/ 

有時方法名可能和關鍵字沖突,那么定義起來就比較麻煩

在 WeiBo/home/controller/IndexController.class.php 中如果方法名與ThinkPHP中的關鍵字重合,則會出錯,類似:

1 <?php
2 namespace Home\Controller;
3 use Think\Controller;
4 class IndexController extends Controller {
5     public function class() {
6         echo "this is class";
7     }
8 }

報錯如下:

控制器提供了一個配置定義:

在 WeiBo/Conf/config.php 中進行配置:

1 //配置控制器方法后綴
2 'ACTION_SUFFIX'=>'Action',

每個方法后面加上Action,對于URL訪問不需要加Action

1 class IndexController  extends Controller {
2  public  function indexAction() {
3   echo 'index';
4 }
5  public function classAction() {
6  echo 'test';
7   }
8 }

這是在瀏覽器中輸入 http://localhost/demo39/index/class 則可以訪問,

注意,這是瀏覽器中的地址還是class,而不是classAction

 

默認情況下通過 URL 訪問的頁面是控制器模塊下的方法,即:Controller 目錄下的
UserController.class.php 類。它是對外公開可訪問的,我們可以稱為訪問控制器。那
么很多時候,由于項目業務的高度繁雜,我們可能想法很多業務分離到另外的層,比如事件
控制器層。那么可以這么操作:

第一步:創建事件控制器目錄:Event;(此時Event與Controller同級)
第二步:創建 UserEvent.class.php 類;

代碼如下:

1 <?php
2 namespace Home\Event;
3 
4 class UserEvent {
5     public function test() {
6         echo '這是事件控制器層的封裝,不對外公開,屬于內部調用!';
7     }
8 }

在 WeiBo/home/controller/IndexController.class.php 中調用是如下:

<?php

namespace Home\Controller;
use Think\Controller;
use Home\Event\UserEvent;

class indexController extends Controller {

    public   function event() {
       $userEvent =  new UserEvent();
       $userEvent->test();
         echo 'test';
   }
}

這時即可調用成功:

PS:這里調用別的控制器還可以使用快捷調用方法 A()。

1 $userEvent = A('User', 'Event');
2 $userEvent = A('Admin/User', 'Event'); //在Admin下的user調用Event

代碼如下:

 1 <?php
 2 
 3 namespace Home\Controller;
 4 use Think\Controller;
 5 use Home\Event\UserEvent;
 6 
 7 class IndexController extends Controller {
 8     public function event() {
 9         //$userEvent = new UserEvent();
10         $userEvent = A('User','Event');
11         $userEvent->test();
12         echo "test";
13     }
14 }

 

默認情況下,控制器只支持一級控制器。當項目較為繁雜的時候,想創建統一模塊下多
個控制器時,可以配置二級控制器。

第一步:配置允許二級控制器

在 WeiBo/Common/Conf/config.php 中寫入如下配置代碼:

1 //允許二級控制器
2 'CONTROLLER_LEVEL'=>2,

在 WeiBo/Home/Controller/ 下新建  Member  文件夾,然后在 Member 文件夾下新建 CommentController.class.php 文件,代碼如下:

1 <?php
2 namespace Home\Controller\Member;
3 use Think\Controller;
4 
5 class CommentController extends Controller {
6     public function test() {
7         echo 'comment test';
8     }
9 }

此時在瀏覽次地址出輸入 http://localhost/demo39/Member/Comment/test 即可得到:

但是此時如果加載與 Member 文件同級的 IndexController.class.php ,則會發生錯誤,

但如果在config文件中把

1 //允許二級控制器
2 'CONTROLLER_LEVEL'=>2,

去掉,則又可以重新訪問了。

 

ThinkPHP 控制器還提供了兩個特殊的方法,前置操作方法_before_index()和后置操
作方法_after_index()。這兩個方法,在控制器調用 index()方法的時候,一個在之前執

行,一個在之后執行。

在 WeiBo/Home/Controller/IndexController.class.php 中的代碼如下:

 1 <?php
 2 
 3 namespace Home\Controller;
 4 use Think\Controller;
 5 use Home\Event\UserEvent;
 6 
 7 class IndexController extends Controller {
 8     public function index() {        
 9         echo "this is index"."<br>";
10     }
11 
12     public function _before_index() {
13         echo "this is before index"."<br>";
14     }
15     public function _after_index() {
16         echo "this is after index"."<br>";
17     }
18 }

效果圖如下:

 

二.Action  參數綁定

參數綁定是通過直接綁定 URL 地址中的變量作為操作方法的參數,可以簡化方法的定
義甚至路由的解析。

在 WeiBo/Common/Conf/config.php 中配置如下:

1 //啟用Action參數綁定,默認為true,可以不寫
2 'URL_PARAMS_BIND'=> true,

默認的參數綁定是按變量名來綁定的,直接通過 URL 傳遞參數。

1 //變量名為$id
2  class IndexController  extends Controller {
3  public  function index($id) {
4  echo 'id:'.$id;
5      }
6 }

 

通過URL  http://localhost/demo39/Index/index/id/5 訪問,得到:

PS:當你 URL 沒有傳遞參數(id/5)的時候,那么頁面會報錯:參數錯誤或者未定義:id。
當然,如果取消綁定,則不會報錯'URL_PARAMS_BIND'=> false,。但是,為了程序的
嚴謹性,一般需要不要取消參數綁定。

 

如果你個那個參數設定一個默認值,當沒有傳遞參數的時候,會直接啟用默認值:

1 //給變量$id 設置默認值
2  public  function index($id=1)

還有一種是按順序傳遞參數,這個方法可以省略掉鍵值對中的鍵,也就是說 id 不需要
傳遞,只需要傳遞 5 這個值即可。但必須按照多個參數的順序。

在config.php中的配置如下:

1 //定義按順序傳參綁定
2 'URL_PARAMS_BIND_TYPE'=>1,

在 WeiBo/Home/Controller/IndexController.class.php 中的代碼如下:

//傳遞兩個參數
 class IndexController  extends Controller {
 public  function index($id, $type) {
 echo 'id:'.$id.',type:'.$type;
  }
}

此時URL  http://localhost/demo39/User/index/5/a 

得到結果如下:


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()