控制器
<h1>控制器写法</h1>
<p>控制器路径: /app/index/v1.0/ctrl/index.class.php</p>
<pre><code><?php
namespace ctrl; // 此处必须是 ctrl 命名空间
class index {
static function init () //前置方法
{
echo '<p>我是前置方法</p>';
}
static function index () //inedx方法
{
echo '<p>I am index ctrl</p>';
}
static function hello () //hello方法
{
echo '<p>I am hello ctrl</p>';
}
static function after () //后置方法
{
echo '<p>我是后置方法</p>';
}
}</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=>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><?php
namespace root/base;
class base_ctrl {
static function init () //公用前置方法
{
echo '<h1>我是公用前置方法</h1>';
}
static function hello ()
{
echo '<h1>Hello World ! I am base_ctrl</h1>';
}
}</code></pre>
<p>控制器路径: /app/index/v1.0/ctrl/index.class.php</p>
<pre><code><?php
namespace ctrl; // 此处必须是 ctrl 命名空间
use root/base/base_ctrl // 引用上面定义的基类,如要继承其它路径下的类,只需修改此处即可
class index extends base_ctrl {
static function init ()
{
parent::init(); //调用一下被覆盖的父类方法
echo '<p>我是控制器的前置方法<p>';
}
static function index ()
{
parent::hello();
echo '<p>I am ctrl<p>';
}
}</code></pre>
<p><strong>2. 应用目录下base目录的基类</strong>
【应用名:index】
基类路径: /app/index/v1.0/base/app_base_ctrl.class.php</p>
<pre><code><?php
namespace app/base;
class app_base_ctrl {
static function init () //公用前置方法
{
echo '<h1>我是公用前置方法</h1>';
}
static function hello ()
{
echo '<h1>Hello World ! I am base_ctrl</h1>';
}
}</code></pre>
<p>控制器路径: /app/index/v1.0/ctrl/index.class.php</p>
<pre><code><?php
namespace ctrl;
use app/base/app_base_ctrl
class index extends app_base_ctrl {
static function init ()
{
parent::init();
echo '<p>我是控制器的前置方法<p>';
}
static function index ()
{
parent::hello();
echo '<p>I am ctrl<p>';
}
}</code></pre>
<p><strong>3. 模块目录下base目录的基类</strong>
【应用名:index】
【模块名:user】
基类路径: /app/index/v1.0/user/base/module_base_ctrl.class.php</p>
<pre><code><?php
namespace module/base;
class module_base_ctrl {
static function init () //公用前置方法
{
echo '<h1>我是公用前置方法</h1>';
}
static function hello ()
{
echo '<h1>Hello World ! I am base_ctrl</h1>';
}
}</code></pre>
<p>控制器路径: /app/index/v1.0/user/ctrl/index.class.php</p>
<pre><code><?php
namespace ctrl;
use module/base/module_base_ctrl
class index extends app_base_ctrl {
static function init ()
{
parent::init();
echo '<p>我是控制器的前置方法<p>';
}
static function index ()
{
parent::hello();
echo '<p>I am ctrl<p>';
}
}</code></pre>