html整体居中代码,html中字体类型的代码
控制器
路径控制器文件存储在应用程序/类/控制器文件夹中。
classes类目录中记录的文件类名与该文件的位置相对应。
1 .例如,有一个文件。 classes/controller/common user.PHP
CommonUser.php文件中的类名应该是Controller_CommonUser。
2 .例如,有一个文件。 classes/controller/VIP/user.PHP
User.php文件中的类名应该表示Controller_Vip_User,即下划线表示文件夹分隔符。
命名约定控制器的文件名必须带有Controller_前缀并对大小写敏感,才能与类名相对应。 示例: Controller_Welcome。
访问控制器访问支持PATH_INFO和GET模式。
1.PATH_INFO模式例如访问: http://127.0.0.1/index.PHP/welcome/index.do? id=123
1在本例中,假设控制器文件配置方法的url后缀为. do,方法前缀为do,并且方法名称的第一个字符的大写字母不包含前缀。
2此地址访问文件。 application/classes/controller/welcome.PHP中welcome类的do_index方法。
3可以同时传递一个get变量id,通过Sr:get('id '; 取得123。
2.GET模式1 .例如访问: http://127.0.0.1/index.php? c=Welcomea=indexid=123
1、这个地址正在访问文件。 这是application/classes/controller/welcome.PHP中基于welcome的do_index方法。
2、get模式下c参数表示控制器,a参数为代码方法。
3、可以同时传递一个get变量id,通过Sr:get('id '; 取得123。
2 .例如访问: http://127.0.0.1/index.php? c=Welcomea=indexid=123m=Demo
1、这个地址正在访问文件。 这是application/hvmc/demo/classes/controller/welcome.PHP中基于welcome的do_index方法。
2、在get模式下,c参数表示控制器,a参数为代码方法,m为hvmc模块名。
3、同时传递一个get变量id,可以通过Sr:get('id '获取123 )。
提示:
有关详细路由,请单击以转至路由手册
代码规范控制器类必须继承Soter_Controller类,并使类名开头大写。
以下是示例。
class controller _ welcomeextendsoter _ controller {
公共函数do _ index (
ECHOSr:3360get(id );
}
}
获取用于访问控制器的信息用于访问控制器的信息全部存储在Soter_Route类的对象中。
当前访问控制器信息的Soter_Route对象可从Sr:3360config(-getroute )中获取。
例如,以下代码:
$ route=Sr :3360 config (-get route );
然后,可以通过$route对象的多种方法获取信息。
Soter_Route对象的有用方法如下:
1.$route-getController ()获取当前访问的控制器类名,例如:Controller_Welcome
2 .获取2.$route-getControllerShort ()当前访问的没有Controller_前缀的控制器类名,例如:Welcome
3.$route-getMethod ()获取当前访问的方法的名称。 例如,do_index
4.$route-getMethodShort ()获取当前访问的无前缀方法名称,例如:索引
5.$route-getArgs ()检索url中的所有参数。 例如,阵列)、' moive )和无为空
6.$route-getHmvcModuleName ()获取当前访问的HMVC模块名称,例如:Demo。 没有的话是空的
与控制器相关的配置位于入口文件中,显示以下配置:
1 .默认控制器
-设置默认控制器(' welcome ) ) )。
2 .默认方法
_
gt;setDefaultController('index')
3.方法前缀
->setMethodPrefix('do_')
4.方法url后缀
->setMethodUriSubfix('.do')
5.当用户在浏览器地址里面只输入了域名,或者hvmc模块。没有输入控制器名称和方法名称。
那么在这种情况下我们可以设置一个默认的控制器和默认的方法。
详细的内容参考路由手册的“默认控制器和默认方法”部分。
1.默认情况下,我们在控制器方法里直接echo字符串输出数据到浏览器,我们还可以return一个字符串同样可以输出到浏览器。
2.如果我们在控制器方法里面return一个数据数组
比如下面代码:
class Controller_Welcome extends Soter_Controller {
public function do_index() {
$data=array('test'=>'hello');
return $data;
}
}
可以看到上面的do_index方法里面直接返回了一个数组数据,
那么Soter就会自动调用视图文件application/views/Welcome/index.php
并通过视图的set方法把数据$data传递给index.php视图文件,视图index.php里面可以直接使用$test变量了。
这种模式,视图位置和名称与不含Controller_前缀的控制器名称和不含前缀的方法名称是对应的。
控制器方法里面直接return数组,调用的视图文件和方法名称对应关系如下:
application/views/不含Controller_前缀的控制器名称/不含前缀的方法名称.php
Soter可以在控制器方法级别上缓存方法的输出,开启这个功能很简单,只需要在入口文件里面进行配置即可。
我们看到入口文件里面有下面的配置:
//设置控制器方法缓存规则,可以是配置文件名称,也可以是配置规则数组
->setMethodCacheConfig('method_cache')
通过传入配置文件名称可以让我们在不同环境下面自动使用不同的缓存策略,
我们只需要在不同的环境配置目录下面放一个method_cache.php即可,里面写上对应环境的配置。
method_cache.php内容如下:
/**
* 需要缓存的控制器方法缓存配置
* 键规则是:控制器名称::方法名称
* 控制器名称不需要Controller_前缀,方法名称不需要前缀。
*/
return array(
'Welcome::index' => array(
'cache' => true, //是否开启缓存
'time' => 3600, //缓存时间,单位秒
'key' => function() {
//根据具体的业务逻辑,返回缓存key,
//返回的key如果为空,则不使用缓存
return 'userId:' . Sr::get('userId');
}
)
);
我们还可以直接传入配置数组:
->setMethodCacheConfig(
array(
'Welcome::index' => array(
'cache' => true, //是否开启缓存
'time' => 3600, //缓存时间,单位秒
'key' => function() {
//根据具体的业务逻辑,返回缓存key,
//返回的key如果为空,则不使用缓存
return 'userId:' . Sr::get('userId');
}
)
)
)
直接传入配置数组的方式相对不够灵活,无论哪种环境我们的程序使用的都是一样的方法缓存配置。
使用传入配置数组还是使用传入配置文件名称,我们可以按着自己的需求来选择。
1.如果一个控制器有一个名字为before的方法,在Soter里面称为“前置方法”,
前置方法类似于类的构造方法,在web运行模式下,会在每个被访问的控制器方法执行之前执行before方法。
2.如果一个控制器有一个名字为after的方法,在Soter里面称为“后置方法”,
后置方法类似于类的析构方法,在web运行模式下,会在每个被访问的控制器方法执行之后执行after方法。
下面我们结合实例来理解这两个方法,比如有一个Welcome控制器类代码如下:
class Controller_Welcome extends Soter_Controller {
public function before($method,$args){
if($method=='testBefore'){
echo 'before'.$args[0];
}
}
public function after($method,$args,$contents){
if($method=='testAfter'){
echo 'after'.$args[0].$contents;
}else{
echo $contents;
}
}
public function do_testBefore($a){
echo 'x'.$a;
}
public function do_testAfter(){
echo 'test';
}
}
A.当我们访问:/Welcome/testBefore-1.do,会输出:before1x1
为什么会是before1x1,我们分析一下可以看到before方法在执行testBefore之前被执行了,
before方法里面判断被访问的方法$method是否是“testBefore”,如果是就输出before字符串和url中传递给testBefore方法的第一个参数,也就是before1。
接着testBefore方法被执行,testBefore输出了x和第一个参数1也就是x1,加上前面before方法输出的before1,最终结果就是before1x1。
B.当我们访问:/Welcome/testAfter-1.do,会输出:after1test
为什么会是after1test,我们分析一下可以看到在testAfter方法被执行之后执行了after方法,testAfter方法里面输出量test,
然后after方法里面判断被访问的方法是否是testAfter,如果是就输出:“after字符串”和“1”和“testAfter方法的输出也就是test”,
那么被访问的方法是否是testAfter,最后结果就是after1test。
如果被访问的方法不是testAfter,则原样输出被方法的方法的输出内容$contents。
前置方法和前置方法参数介绍:
1.可以看到前置方法before接受两个参数$method和$args,它们含义如下:
$method 是不包含前缀的被访问的控制器方法名
$args 是url中传递给被访问的控制器方法的参数数组
2.可以看到后置方法after接受三个参数$method、$args和$contents,它们含义如下:
$method 是不包含前缀的被访问的控制器方法名
$args 是url中传递给被访问的控制器方法的参数数组
$contents 是被访问的控制器方法的输出的字符串内容
提示:
如果后置方法不输出任何东西,那么访问控制器的任何方法,即使方法里面有输出,最终页面也不会有输出,
最终的输出是后置方法after决定的,所以后置方法里面要根据情况处理$contents,然后输出。
一键复制
编辑
Web IDE
原始数据
按行查看
历史