Z-PHP_v4


控制器

<h1>控制器写法</h1> <p>控制器路径: /app/index/v1.0/ctrl/index.class.php</p> <pre><code>&lt;?php namespace ctrl; // 此处必须是 ctrl 命名空间 class index { static function init () //前置方法 { echo '&lt;p&gt;我是前置方法&lt;/p&gt;'; } static function index () //inedx方法 { echo '&lt;p&gt;I am index ctrl&lt;/p&gt;'; } static function hello () //hello方法 { echo '&lt;p&gt;I am hello ctrl&lt;/p&gt;'; } static function after () //后置方法 { echo '&lt;p&gt;我是后置方法&lt;/p&gt;'; } }</code></pre> <h1>控制器的访问</h1> <p><strong>以下示例展示的是访问 admin 应用的 user 模块 下的 index 控制器 内的 add 方法,传递code参数值是123456</strong></p> <ul> <li> <h3>默认querystring的url模式</h3> <p>示例:<a href="http://www.***.com/admin.php?m=user&c=index&a=add&code=123456">http://www.***.com/admin.php?m=user&c=index&a=add&code=123456</a> m参数指定模块名,如果不启用模块功能,无需此参数 c参数指定控制器 a参数是操作名 code是自定义需要传递的参数</p> </li> <li> <h3>pathinfo的url模式</h3> <p>示例:<a href="http://www.***.com/admin.php/user/index/add/code/123456">http://www.***.com/admin.php/user/index/add/code/123456</a> 用 / 分割pathinfo部分得到的参数就是 [user, index, add, code, 123456] 前三个参数位置是固定的,分别是:模块,控制器,操作 如果不启用模块功能,则前两个参数位置是固定的,分别是:控制器,操作 剩余的参数按顺序两两一组构成 key=&gt;value 的格式 如此使用常量 ROUTE['params']['code']便可以取到code参数值为123456</p> </li> <li> <h3>路由模式的url详见路由说明</h3> </li> </ul> <p><font color=red></p> <ul> <li><strong>debug模式下,访问不存在的控制器或方法,或是程序内部错误,将直接抛出错误信息。</strong></li> <li><strong>非debug模式下访问不存在的方法会执行控制器的 _404() 方法。</strong></li> <li><strong>非debug模式下出现程序内部错误会执行控制器的 _500() 方法。</strong></li> <li><strong>非debug模式下如果当前控制器不存在 _404() 或 _500() 方法:则会执行默认的 _404() 或 _500() 方法显示错误页面。</strong></li> <li><strong>可以根据需要将_404(), _500() 方法写在控制器基类当中</strong></li> </ul> <p></font></p> <h1>控制器继承</h1> <ul> <li><strong>考虑到简单灵活,所以没有指定一个控制器基类,<font color=red>无须</font> 继承基类</strong></li> <li><strong>框架内虽然有一个控制器基类,但是只有简单的错误页面,继承此类没有必要,也不建议大家这么做</strong></li> <li><strong>大家完全可以按自己的需求写一个基类放在base目录下,控制器继承此类</strong></li> <li><strong>其它自定义路径可以参考 <font color=red>命名空间映射</font></strong></li> </ul> <p><strong>1. 根目录下base目录的基类继承</strong> 【应用名:index】 基类路径: /base/base_ctrl.class.php</p> <pre><code>&lt;?php namespace root/base; class base_ctrl { static function init () //公用前置方法 { echo '&lt;h1&gt;我是公用前置方法&lt;/h1&gt;'; } static function hello () { echo '&lt;h1&gt;Hello World ! I am base_ctrl&lt;/h1&gt;'; } }</code></pre> <p>控制器路径: /app/index/v1.0/ctrl/index.class.php</p> <pre><code>&lt;?php namespace ctrl; // 此处必须是 ctrl 命名空间 use root/base/base_ctrl // 引用上面定义的基类,如要继承其它路径下的类,只需修改此处即可 class index extends base_ctrl { static function init () { parent::init(); //调用一下被覆盖的父类方法 echo '&lt;p&gt;我是控制器的前置方法&lt;p&gt;'; } static function index () { parent::hello(); echo '&lt;p&gt;I am ctrl&lt;p&gt;'; } }</code></pre> <p><strong>2. 应用目录下base目录的基类</strong> 【应用名:index】 基类路径: /app/index/v1.0/base/app_base_ctrl.class.php</p> <pre><code>&lt;?php namespace app/base; class app_base_ctrl { static function init () //公用前置方法 { echo '&lt;h1&gt;我是公用前置方法&lt;/h1&gt;'; } static function hello () { echo '&lt;h1&gt;Hello World ! I am base_ctrl&lt;/h1&gt;'; } }</code></pre> <p>控制器路径: /app/index/v1.0/ctrl/index.class.php</p> <pre><code>&lt;?php namespace ctrl; use app/base/app_base_ctrl class index extends app_base_ctrl { static function init () { parent::init(); echo '&lt;p&gt;我是控制器的前置方法&lt;p&gt;'; } static function index () { parent::hello(); echo '&lt;p&gt;I am ctrl&lt;p&gt;'; } }</code></pre> <p><strong>3. 模块目录下base目录的基类</strong> 【应用名:index】 【模块名:user】 基类路径: /app/index/v1.0/user/base/module_base_ctrl.class.php</p> <pre><code>&lt;?php namespace module/base; class module_base_ctrl { static function init () //公用前置方法 { echo '&lt;h1&gt;我是公用前置方法&lt;/h1&gt;'; } static function hello () { echo '&lt;h1&gt;Hello World ! I am base_ctrl&lt;/h1&gt;'; } }</code></pre> <p>控制器路径: /app/index/v1.0/user/ctrl/index.class.php</p> <pre><code>&lt;?php namespace ctrl; use module/base/module_base_ctrl class index extends app_base_ctrl { static function init () { parent::init(); echo '&lt;p&gt;我是控制器的前置方法&lt;p&gt;'; } static function index () { parent::hello(); echo '&lt;p&gt;I am ctrl&lt;p&gt;'; } }</code></pre>

页面列表

ITEM_HTML