之前将域名中index.php路径给隐藏掉了,因为index控制器和index方法都是tp6默认访问的,所以在输入localhost/admin也可以直接访问到index控制器里面的index方法,但是实际的访问路径应该是http://localhost/admin/index/index
当访问新定义的hello方法时,却一样需要把全部路径才可以访问,直接输入localhost/admin/hello是会报错,提示控制器不存在,只能通过全部路径localhost/admin/index/hello才可以访问,那路径的显露程序太大了,也不优雅;而且在多应用模式下,所有的访问路径都必须带应用名称,真的很不好。这个时候就可以通过路由设置来简化访问路径
1.路由基本知识
1.1 常用于项目中的路由分为五种:get/post/put/delete/any
Route::get('new/<id>','News/read'); // 定义GET请求路由规则,常用于获取数据库数据 Route::post('new/<id>','News/update'); // 定义POST请求路由规则,常用于前端数据提交 Route::put('new/:id','News/update'); // 定义PUT请求路由规则 Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则 Route::any('new/:id','News/read'); // 所有请求都支持的路由规则
1.2路由变量
Route::rule('/', 'index'); // 首页访问路由 Route::rule('my', 'Member/myinfo'); // 静态地址路由 Route::rule('blog/:id', 'Blog/read'); // 静态地址和动态地址结合 Route::rule('new/:year/:month/:day', 'News/read'); // 静态地址和动态地址结合 Route::rule(':user/:blog_id', 'Blog/read'); // 全动态地址
1.3 路由使用注意事项
①路由的使用首先要使用符合规范的命名空间,这样才能控制器才能正常访问;
②然后还要通过引用门面中的路由方法
③多应用模式下,分为应用路由和全局路由。应用内部可以创建admin/route/app.php定义应用内部路由;而根目录下route/app.php是全局路由,一般用配置默认路由,也就是用户访问路由;应用路由的执行要优先于全局路由,也就是程序会先执行应用内的路由。
④在config/route.php文件是全局路由配置,如是否设置强制路由,也就是只能通过路由访问
// 是否强制使用路由 'url_route_must' => true,
1.4 创建应用内部路由,在admin应用下创建route/app.php,并加入以下代码
<?php namespace app\admin\route;//命名空间路径 use think\facade\Route;//引用门面路由类 Route::get('/','index/index'); //内部路由定义路径时不需要加入应用路径 Route::get('hello','index/hello');
1.5 定义全局路由,在根目录route/app.php文件中定义全局路由,主要用于前台访问
<?php use think\facade\Route; Route::get('/', 'web/Index/index'); Route::get('hello','web/Index/hello');
出现错误的原因是开启了强制路由,也就是没有定义过路由的都无法访问,在web应用中并没有定制,所以一样要在web应用下创建route/app.php然后定义内部路由。
<?php namespace app\web\route; use think\facade\Route; Route::get('/','index/index'); Route::get('hello','Index/hello');
但是最后我发现,如果通过localhost/hello也并不能访问web应用下index控制器中的hello方法,只能通过localhost/web/hello访问,也就是感觉全局定义的路由并没有起作用。
算了,慢慢学吧~