组合变量规则
如果你的路由规则比较特殊,可以在路由定义的时候使用组合变量。
例如:
Route::get('item-
->pattern(['name' => '\w+', 'id' => '\d+']);
组合变量的优势是路由规则中没有固定的分隔符,可以随意组合需要的变量规则和分割符,例如路由规则改成如下一样可以支持:
Route::get('item
->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);
Route::get('item@
->pattern(['name' => '\w+', 'id' => '\d+']);
使用组合变量的情况下如果需要使用可选变量,则可以使用下面的方式:
Route::get('item-
->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']);
组合变量的正则定义不支持使用模式修饰符
/home/myth/www/think/route/route.php
Route::get('item-
->pattern(['name' => '\w+', 'id' => '\d+']); // http://contoso.org/item-book-2334
Route::get('item
->pattern(['name' => '[a-zA-Z]+', 'id' => '\d+']); // http://contoso.org/itembook2334
Route::get('item@
->pattern(['name' => '\w+', 'id' => '\d+']); // http://contoso.org/item@book-2334
Route::get('item-
->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-
->pattern(['name' => '\w+', 'id' => '\d+']);
// 定义动态路由
// Route::get('hello/:name/:id', 'index/:name/detail'); // http://contoso.org/hello/product/2334
Route::get('item-
->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