Ama*_*wat 8 php routes cakephp
使用CakePHP v3.3.16
我想写一个后备路由,如果URL没有连接到任何操作,那么它应该转到该回退.
像这样创建SEO友好URL的路由
$routes->connect(
':slug',
['prefix'=>'website','controller' => 'Brands', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
$routes->connect(
':slug/*',
['prefix'=>'website','controller' => 'Products', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
Run Code Online (Sandbox Code Playgroud)
但它也包含了所有的控制器动作,所以如果我试图调用控制器ex:cart/index它将转到网站/品牌/索引/索引
如果我必须删除它,我必须创建一个像这样的路线/
$routes->connect('/cart',['controller' => 'Cart'], ['routeClass' => 'DashedRoute']);
Run Code Online (Sandbox Code Playgroud)
等等到另一个控制器访问.
示例:我有一个控制器CartController动作addCart
情况1
如果我访问URL my_project/cart/addCart/它应该去购物车控制器动作
案例2
如果我访问URL my_project/abc/xyz/并且没有名为abc的控制器,那么它应该转到BrandsController动作索引
我的当前routes.php看起来像这样
Router::defaultRouteClass(DashedRoute::class);
Router::scope('/', function (RouteBuilder $routes) {
$routes->connect('/', ['prefix'=>'website','controller' => 'Home', 'action' => 'index']);
$routes->connect('/trending-brands', ['prefix'=>'website','controller' => 'Brands', 'action' => 'trending']);
$routes->connect('/users/:action/*',['prefix'=>'website','controller' => 'Users'], ['routeClass' => 'DashedRoute']);
$routes->connect('/cart',['prefix'=>'website','controller' => 'Cart'], ['routeClass' => 'DashedRoute']);
$routes->connect('/cart/:action/*',['prefix'=>'website','controller' => 'Cart'], ['routeClass' => 'DashedRoute']);
$routes->connect(
':slug',
['prefix'=>'website','controller' => 'Brands', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
$routes->connect(
':slug/*',
['prefix'=>'website','controller' => 'Products', 'action' => 'index'],
['routeClass' => 'DashedRoute']
);
$routes->connect(':controller', ['prefix'=>'website'], ['routeClass' => 'DashedRoute']);
$routes->connect(':controller/:action/*', ['prefix'=>'website'], ['routeClass' => 'DashedRoute']);
$routes->fallbacks(DashedRoute::class);
});
Router::prefix('website', function (RouteBuilder $routes) {
$routes->fallbacks(DashedRoute::class);
});
Plugin::routes();
Run Code Online (Sandbox Code Playgroud)
如果我必须删除排除它,我必须创建一个像这样的路由/等等到另一个控制器来访问。
无需指定模式中的每个控制器/名称,而是可以先创建所有指定的路由,然后将以下路由放在它们下面以捕获所有不匹配的路由。
$routes->connect(':/prefix/:controller/:action/*', [], ['routeClass' => 'DashedRoute']);
Run Code Online (Sandbox Code Playgroud)
也许还有一个没有前缀的
$routes->connect('/:controller/:action/*', [], ['routeClass' => 'DashedRoute']);
Run Code Online (Sandbox Code Playgroud)
既然您提到您正在使用3.3.*蛋糕版本,您的路线可以利用路线范围来编写
Router::prefix('website', function ($routes) {
// All routes here will be prefixed with `/prefix`
// And have the prefix => website route element added.
$routes->fallbacks(DashedRoute::class);
$routes->connect(
'/:slug',
['controller' => 'Brands', 'action' => 'index']
);
$routes->connect(
':slug/*',
['controller' => 'Products', 'action' => 'index']
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |