ThinkPHP5.1 路由地址中组合变量规则的使用

组合变量规则
如果你的路由规则比较特殊,可以在路由定义的时候使用组合变量。

例如:

Route::get('item--', 'product/detail')
    ->pattern(['name' => '\w+', 'id' => '\d+']);
组合变量的优势是路由规则中没有固定的分隔符,可以随意组合需要的变量规则和分割符,例如路由规则改成如下一样可以支持:

Route::get('item', 'product/detail')
    ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);
Route::get('item@-', 'product/detail')
    ->pattern(['name' => '\w+', 'id' => '\d+']);
使用组合变量的情况下如果需要使用可选变量,则可以使用下面的方式:

Route::get('item-', 'product/detail')
    ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);
组合变量的正则定义不支持使用模式修饰符

/home/myth/www/think/route/route.php

Route::get('item--', 'product/detail')
    ->pattern(['name' => '\w+', 'id' => '\d+']);  // http://contoso.org/item-book-2334

Route::get('item', 'product/detail')
    ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']); // http://contoso.org/itembook2334

Route::get('item@-', 'product/detail')
    ->pattern(['name' => '\w+', 'id' => '\d+']);  // http://contoso.org/item@book-2334

Route::get('item-', 'product/detail')
    ->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']); //http://contoso.org/item-book2334
                                                       // or http://contoso.org/item-book
return [

];

/home/myth/www/think/application/index/controller/Product.php

namespace app\index\controller;
use think\Controller;

class Product extends Controller
{    
    public function detail($name,$id){
        return 'detail - '.$name.'-'.$id;   //  以上5条不同的路由地址都会执行同一控制器的同一方法
    }
}

动态路由
可以把路由规则中的变量传入路由地址中,就可以实现一个动态路由,例如:

// 定义动态路由
Route::get('hello/:name', 'index/:name/hello');
name变量的值作为路由地址传入。

动态路由中的变量也支持组合变量及拼装,例如:

Route::get('item--', 'product_:name/detail')
    ->pattern(['name' => '\w+', 'id' => '\d+']);

// 定义动态路由
// Route::get('hello/:name/:id', 'index/:name/detail'); // http://contoso.org/hello/product/2334

Route::get('item--', 'product_:name/detail')
    ->pattern(['name' => '\w+', 'id' => '\d+']); // http://contoso.org/item-book-2334

return [

];

/home/myth/www/think/application/index/controller/ProductBook.php

namespace app\index\controller;
use think\Controller;

class ProductBook extends Controller
{    
    public function detail($name,$id){
        return 'Product_Book detail - '.$name.'-'.$id;
    }
}
————————————————
版权声明:本文为CSDN博主「zhengzizhi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhengzizhi/article/details/78691171

你可能感兴趣的:(ThinkPHP5.1 路由地址中组合变量规则的使用)