在我的 CakePHP 应用程序中,我的静态页面设置如下:
Router::connect(
'/terms',
array('controller' => 'pages', 'action' => 'display', 'terms')
);
这会将 /terms
重写为 /pages/display/terms
以使网址更短更漂亮。
现在,如果我想对所有静态页面执行此操作,则会变得相当多余:
Router::connect(
'/terms',
array('controller' => 'pages', 'action' => 'display', 'terms')
);
Router::connect(
'/privacy',
array('controller' => 'pages', 'action' => 'display', 'privacy')
);
Router::connect(
'/about',
array('controller' => 'pages', 'action' => 'display', 'about')
);
使用常规的 mod_rewrite 你可以做这样的事情:
/(terms|privacy|about) /pages/display/$1
所以我自然地尝试了这个:
Router::connect(
'/(terms|privacy|about)',
array('controller' => 'pages', 'action' => 'display', '$1')
);
它不起作用。是否支持这样的事情,如果支持,你会怎么做?
最佳答案
就在我的脑海中,这可能会解决问题。要对某个部分执行正则表达式匹配,您需要这样做:
Router::connect(
'/:page',
array(
'controller' => 'pages',
'action' => 'display',
),
array(
'page' => '(terms|privacy|about)',
'pass' => array('page')
)
);
请注意 URL 中的 page
占位符是如何在第三个参数(数组)中推断出来的。在那里我们说它必须与提供的正则表达式匹配。另外值得注意的是,它还表示将 page
占位符传递给 action
方法。这样它就知道要渲染哪个页面。
关于CakePHP 在路由中使用正则表达式变量捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973389/