在前台Index控制器中,调用不同名的控制器(不管前台还是后台),有三种方法。但是,如果调用的是后台的同名控制器,记住要用别名,否则会出错。
操作方法的访问本身不会受URL自动转换的影响,但会影响默认的模板渲染输出。
如果你的服务器环境不支持pathinfo方式的URL访问,可以使用兼容方式,例如:
http://tp5.com/index.php?s=/index/Index/index
其中变量s的名称的可以配置的。
5.0不再支持普通的URL访问方式,所以下面的访问是无效的,你会发现无论输入什么,访问的都是默认的控制器和操作^_^
http://tp5.com/index.php?m=index&c=Index&a=hello
TP5默认情况下,URL地址中的控制器和操作名是不区分大小写的,因此下面的访问其实是等效的:
http://tp5.com/index.php/index/Index/Index
http://tp5.com/index.php/index/INDEX/INDEX
TP5模块在ThinkPHP中的概念其实就是应用目录下面的子目录,而官方的规范是目录名小写,因此模块全部采用小写命名,无论URL是否开启大小写转换,模块名都会强制小写。
tp5中有个dump方法,友好输出。
dump(config())中config没有参数,则是读取所有的配置信息!
如果不清楚当前的入口文件位置,可以使用phpinfo()在页面输出中查看DOCUMENT_ROOT的值。
根据类的命名空间可以快速定位文件位置,在ThinkPHP5.0的规范里面,命名空间其实对应了文件的所在目录,app命名空间通常代表了文件的起始目录为application,而think命名空间则代表了文件的起始目录为thinkphp/library/think,后面的命名空间则表示从起始目录开始的子目录。
空控制器写法
注意,使用redirect助手函数重定向的时候必须加上return返回才会生效。
这里使用了use来导入一个命名空间的类库,然后可以在当前文件中直接使用该别名而不需要使用完整的命名空间路径访问类库。也就说,如果没有使用 use think\Controller; 就必须使用 class Index extends \think\Controller 这种完整命名空间方式。 在后面的内容中,如果我们直接调用系统的某个类的话,都会假设已经在类的开头使用use进行了别名导入。
http://www.tp5.com/index.php/index/hello_world
因为默认的URL访问是不区分大小写的,全部都会转换为小写的控制器名,除非你在应用配置文件中,设置了关闭url自动转换如下:
‘url_convert’ => false,
那么就可以正常访问
http://tp5.com/index.php/index/HelloWorld
如果你的URL地址全部采用路由方式定义,也可以直接使用路由规则来定义URL生成,例如:
url(‘/blog/thinkphp’);
Url::build(‘/blog/8’);
Url::build(‘/blog/2015/05’);
生成方法的第一个参数一定要和路由定义的路由地址保持一致,如果你的路由地址比较特殊,例如使用闭包定义的话,则需要手动给路由指定标识,例如:
// 添加hello路由标识
Route::rule([‘hello’,’hello/:name’], function($name){
return ‘Hello,’.$name;
});
// 根据路由标识快速生成URL
Url::build(‘hello’, ‘name=thinkphp’);
// 或者使用
Url::build(‘hello’, [‘name’ => ‘thinkphp’]);
【5.1 】使用须知
5.1版本,你需要引入think\facade\Url才能使用静态方法调用,其它用法不变。
在此提醒一点,如果你是在模型的内部获取数据,请不要使用$this->nickname,而应该使用$this->getAttr(‘nickname’)方式替代。
url、baseUrl、baseFile、root方法如果传入true,表示获取包含域名的地址。
param方法获取的参数会自动判断当前的请求,以POST请求为例的话,参数的优先级别为:
路由变量> 当前请求变量($_POST变量) > $_GET变量
注意:
这里的路由变量指的是路由规则里面定义的变量或者PATH_INFO地址中的变量。路由变量无法使用get方法或者$_GET变量获取。
param方法支持变量的过滤和默认值,例如:
$request->param(‘name’,’World’,’strtolower’);
可以设置全局的过滤方法,如下:
// 设置默认的全局过滤规则 多个用数组或者逗号分隔
‘default_filter’ => ‘htmlspecialchars ‘,