2、如若大家不想区分朗朗上口写能够改配置文件,2、假如大家不想区分轻重缓急写能够改配置文件

路由定义规则

本章节:详细介绍thinkphp
URL规则、URL伪静态、URL路由、URL重写、URL生成

对于多个参数绑定的情况,只要将相应的变量名和值传进来就可以了,不在乎顺序,比如下面两个会返回相同的结果:

一、URL规则
    1、默认是区分大小写的
    2、如果我们不想区分大小写可以改配置文件
        ‘URL_CASE_INSENSITIVE’=>true,//url不区分大小写    
    3、如果模块名为 UserGroupAction
        那么url找模块就必要要写成
        
    4、如果’URL_CASE_INSENSITIVE’=>false
        那么url也可以写为
        
二、URL伪静态
    ‘URL_HTML_SUFFIX’=>’html|shtml|xml’,//限制伪静态的后缀
三、URL路由
    1、启动路由
        要在配置文件中开启路由支持
        ‘URL_ROUTER_ON’   => true, //开启路由
    2、使用路由
        1.规则表达式配置路由
            ‘my’=>’Index/index’,//静态地址路由
            ‘:id/:num’=>’Index/index’,//动态地址路由
          
 ‘year/:year/:month/:date’=>’Index/index’,//动态和静态混合地址路由
          
 ‘year/:yeard/:monthd/:dated’=>’Index/index’,//动态和静态混合地址路由
加上 d代表类型只能是数字
            ‘my/:id$’=>’Index/index’,// 加上$说明地址中只能是 my/1000
后面不能有其他内容了
        2.正则表达式配置路由
          
 ‘/^year/(d{4})/(d{2})/(d{2})/’=>’Index/index?year=:1&month=:2&date=:3’
        3、注意事项:
            a.越复杂的路由越往前面放
                ‘URL_ROUTE_RULES’=>array(
                    ‘my/:year/:month:/:day’=>’Index/day’,
                    ‘my/:idd’=>’Index/index’,
                    ‘my/:name’=>’Index/index’,
                )
            b.可以使用$作为完全匹配的路由规则
                ‘URL_ROUTE_RULES’=>array(
                    ‘my/:idd$’=>’Index/index’,
                    ‘my/:name$’=>’Index/index’,
                    ‘my/:year/:month:/:day$’=>’Index/day’,
                ),
            c.用正则匹配的方式
                ‘URL_ROUTE_RULES’=>array(
                    ‘/^my/(d+)$/’=>’Index/index?id=:1’,
                    ‘/^my/(w+)$/’=>’Index/index?name=:1’,
                  
 ‘/^my/(d{4})/(d{2})/(d{2})$/’=>’Index/day?year=:1&month=:2&day=:3’,
                ),
        
四、URL重写
    看手册
五、URL生成
    内置一个 U(),可以自动生成完整的URL
    U(‘[分组/模块/操作]?参数’
[,’参数’,’伪静态后缀’,’是否跳转’,’显示域名’])
    例如:
    echo U(‘Index/index’);  ==  /think/index.php/Index/index.html

'DEFAULT_MODULE' => 'Home'

三、URL路由
1、启动路由
要在配置文件中开启路由支持
‘URL_ROUTER_ON’   => true, //开启路由
2、使用路由
1.规则表达式配置路由
‘URL_ROUTER_ON’   => true, //开启路由
‘URL_ROUTE_RULES’ => array( 
‘my’=>’Index/index’,//静态地址路由
访问:
‘:id/:num’=>’Index/index’,/*后面的数字值随便写,字母也行
  动态地址路由 访问:
          可以再模块控制器中用get方式传值  或 获取
           echo $_GET[‘id’];
           echo $_GET[‘num’];   
         */
‘my/:num’=>’Index/index’, //动静混合地址路由
   
‘year/:year/:month/:date’=>’Index/index’,//动态和静态混合地址路由:  
                     
 
‘year/:yeard/:monthd/:dated’=>’Index/index’,//动态和静态混合地址路由
–加上 d代表类型只能是数字
‘my/:id$’=>’Index/index’,// 加上$说明地址中只能是 my/1000
后面不能有其他内容了
);

$this->redirect(‘/New/category/cate_id/2’, 5, ‘页面跳转中…’);


限制路由后缀,通常使用在平时常见的html,htm等后缀,还是以上面的规则为例:

一、URL规则
1、默认是区分大小写的 
2、如果我们不想区分大小写可以改配置文件
‘URL_CASE_INSENSITIVE’=>true,//url不区分大小写
*模块命名太长的情况:
A、如果模块名为 UserGroupAction,复杂模块(一般是IndexAction)
那么url找模块就必要要写成

B、如果’URL_CASE_INSENSITIVE’=>false(区分大小写的情况可以访问)
那么url也可以写为

然后我们创建一个ArticleController,并且为他添加show()方法:

对于可选参数,可以用[]包含表示,比如:

注:控制器的redirect函数的区别在于前者是用URL规则定义跳转地址,后者是一个纯粹的URL地址注:好像官方文档是这样写的

以上的路由配置说明:在每个路由表达式中,:后面跟参数名称,比如上面的:year,:month,:id都是参数名称,以:id为例,它指向Index控制器的read方法,这个方法接受一个$id的参数:

二、URL伪静态(tp默认支持伪静态)

*默认pdo、html、xml…都是支持的,如果要限制加个配置就行
‘URL_HTML_SUFFIX’=>’html|shtml|xml’,//限制伪静态的后缀

这应该是在开发中最常用的功能之一。在应用开发中,经常会遇到一些带有提示信息的跳转页面,例如操作成功或者操作错误页面,并且自动跳转到另外一个目标页面。系统的ThinkController类内置了两个跳转方法success,用于页面跳转提示。

以上d表示限制变量id只能是数字。

‘/^new/$/’ =>
‘Index/achive?year=:1&month=:2’,以上就是一条正确的正则路由。对于正则表达式中的每个正则规则子模式)部分,如果需要在后面的路由地址中引用,可以采用:1、:2这样的方式,序号就是子模式的序号

3、注意事项:
1.越复杂的路由越往前面放
‘URL_ROUTE_RULES’=>array(
‘my/:year/:month:/:day’=>’Index/day’,
 *复杂的路由放在前面,放后面就不会执行
‘my/:idd’=>’Index/index’,
‘my/:name’=>’Index/index’,
)
2.可以使用$作为完全匹配的路由规则(不管复杂否,都会匹配所有正则)
‘URL_ROUTE_RULES’=>array(
‘my/:idd$’=>’Index/index’,
‘my/:name$’=>’Index/index’,
‘my/:year/:month:/:day$’=>’Index/day’,
),
3.用正则匹配的方式
‘URL_ROUTE_RULES’=>array(
‘/^my/(d+)$/’=>’Index/index?id=:1’,
‘/^my/(w+)$/’=>’Index/index?name=:1’,
‘/^my/(d{4})/(d{2})/(d{2})$/’=>’Index/day?year=:1&month=:2&day=:3’,
),

如所见,前面在路由篇提到的控制器就是这么定义的:

正则路由

五、URL生成(手册有详细介绍)
public function url(){
echo U(‘Index/add’); // 生成Index模块的add操作的URL地址
///thinkphp/index.php/index/add
}

‘URL_HTML_SUFFIX’ => ‘html|shtml|xml’

'URL_ROUTER_ON' => true

2.正则表达式配置路由
//
‘/^year/(d{4})/(d{2})/(d{2})/’=>’Index/index?year=:1&month=:2&date=:3’

'URL_PARAMS_BIND_TYPE' => 1

有了基本配置,我们就可以来访问我们的应用默认首页了。进入到项目目录,可以直接使用PHP内置服务器来开始访问,比如:

四、URL重写
比如:   —-
不想让index.php出现
下面是Apache的配置过程,可以参考下:
1、httpd.conf配置文件中加载了mod_rewrite.so模块
2、AllowOverride None 将None改为 All
3、确保URL_MODEL设置为2 (该步骤省略)
4、把下面的内容保存为.htaccess文件放到入口文件的同级目录下
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>
重启Apache之后,原来的
就可以通过访问

 –简化了URL地址,对SEO的支持度好点

然后在浏览器中访问http://localhost:8999/Home/Index/user,就可以看到add user done!了,下面详细来说说这两个重定向方法。success方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间,例如:// redirect to /Article/index after 3 seconds when success$this->success('done','/Home/Article/index',3);// redirect to /Article/error after 5 seconds when failed$this->error('failed','/Home/Article/error',5);

但是,当我们访问


最终生成的URL地址是:

ThinkPHP框架其实还有一个路由机制叫静态路由,这实际上就是规则路由的静态简化版,路由定义中不包含动态参数,静态路由不需要遍历路由规则而是直接定位,因此执行效率会较高。静态路由采用URL_MAP_RULES来定义规则:

原文:thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)

URL生成

'blogs/:id' => array('Index/read',array

[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2…如果不定义模块的话
就表示当前模块名称,下面是一些简单的例子:

浏览器输入localhost:8999就可以看到ThinkPHP的默认首页了:一个笑脸。

访问:

public function read{ echo "read page with" .$id; }

使用前置和后置操作要注意如下两点:

路由表达式支持的正则定义必须以/开头,否则就视为规则表达式,比如:

控制器的定义

如果你查看过ThinkPHP/Conf/convention.php文件,应该就会明白这个其实就是设置默认的控制器。

在上一课程中,你可能会对ThinkPHP的路由会有一丝丝疑惑,不过没关系,学完本课程,很多事都会豁然开朗。

在ThinkPHP中,还支持在限制路由的后缀和使用正则路由。

前置和后置操作

关于控制器我们后面会仔细说

U方法还可以支持路由,如果我们定义了一个路由规则为:

在浏览器输入

这样再次访问上面的URL,就会输出:

'blogs/:idd' => 'Index/read',

‘blogs/:id’ =>
array我们将:id直接映射给read()方法的参数$id,所以现在回头再看,其实路由规则就是给了你一个自定义URL的功能。如果去掉上面的路由设置,我们正确的访问方式是:

这会解析为规则路由而不是正则路由,因为录音表达式并没有以/开始,所以,我们需要这样写:

U方法的第二个参数支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,例如:

如果你还需要传人额外的参数,像第一条的规则array(‘Index/archive’,
‘status=1’)中的status一样传人,你看设置多个这样的参数。

public function user; $data['username'] = 'Think'; $data['email'] = 'Think@gmail.com'; $result = $User->add{ $this->success('success', '/Home/User/addUser'); } else { $this->error; } }

ThinkPHP按定义的顺序依次匹配路由规则,一旦匹配到的话,就会定位到路由定义中的控制器和操作方法去执行,而后面的规则不会继续匹配

如果你尝试在浏览器输入:

define;

相关文章

You can leave a response, or trackback from your own site.

Leave a Reply

网站地图xml地图