我在cakephp中重写我们公司的网站,需要找到一种方法来执行以下操作:
我考虑过几个选项,但这些选项似乎都不适用于此目的。他们是:
我真的可以在应用程序流程中找到一个可以放置此查找/跟踪脚本的地方,而且我很擅长蛋糕,所以我很难过。
编辑:另外,我知道一个名为'promo'的子文件夹很容易做到这一点,但是我的旧网站有很多遗留的URL,也需要处理。答案 0 :(得分:5)
注意:我假设您的促销网址采用“domain.com/advert-259”或其他类似的形式(即没有“domain.com/adverts/ advert-259')。那太简单了:)
希望你可以使用一些正则表达式的路由。将其添加到/config/routes.php并告诉我是否有不同的正则表达式有用:)
$controllers = Configure::listObjects('controller');
foreach ($controllers as &$value)
{
$value = Inflector::underscore($value);
}
Router::connect('/:promo', array('controller' => 'promos', 'action' => 'process'), array('promo' => '(?!('.implode('|', $controllers).')\W+)[a-zA-Z\-_]+/?$'));
现在,您可以在PromosController::process()
处理所有促销代码。
基本上,它检查url中的促销代码,排除 $ controllers数组中的那些(即常规路由不会搞砸)。
稍后您可能需要考虑根据应用的速度和要求来缓存Configure::listObjects()
的值。
答案 1 :(得分:1)
一个非常有趣的问题。我想我会使用第3项。这不是 凌乱 - 毕竟,这通常是由我的东西中的页面控制器处理的。这就是我处理它的方法 - 在routes.php中将你的路由硬编码到你的控制器,然后有一个适用于你的促销代码的matchall路由。这允许你保留遗留的URL,以及使用很多标准的蛋糕东西(你可能只需要明确说明你的每个控制器路由,而不是这样的苦差事...)另外,它会让你做一些有404错误的很酷的东西 - 你可以在那里设置一些逻辑来试图找出他们想去的地方,这样你就可以超级强化你的404.