【问题标题】:Configuring CakePHP 2.0 routing for domain/parameter (without controller name)为域/参数配置 CakePHP 2.0 路由(无控制器名称)
【发布时间】:2011-12-19 01:51:30
【问题描述】:

我希望能够在 CakePHP 2.0 中路由类似以下内容:

domain.com/london
domain.com/milton keynes

到特定的控制器和动作。

应用程序有多个控制器,因此只有在提供的参数与控制器名称不匹配时才应使用此路由。 我使用 CakePHP 1.3.12 实现了这一点,方法是将以下代码添加到 config/routes.php 的底部

Router::connect(
  '/:location',
  array('controller' => 'articles', 'action' => 'testing'),
  array('pass' => array('location'), 'location' => '[a-z ]+')
);

仅当我从 config/routes.php 注释掉 require 行时,才能将此代码与 CakePHP 2.0 一起使用,但随后我会丢失默认路由,以便指向任何其他控制器的 URL 被此捕获。

我怎样才能实现所需的路由?

【问题讨论】:

    标签: cakephp routes cakephp-2.0


    【解决方案1】:

    据我所知,这在 Cake 1.3 中也不应该起作用,仅仅是因为您的 [a-z ]+ 正则表达式也与简单的 /controller_name 路由匹配;路由器无法区分这两者,因此总是会路由到它首先遇到的那个。

    但是,您可以创建自定义路由类来实现此目的。 Mark Story(Cake 开发人员之一)在很久以前写了一篇关于它的优秀文章,它适用于 Cake 1.3,但您可以轻松地将该原理应用于 2.0(我知道,因为我在我的 2.0 应用程序中使用它)。你可以找到帖子here

    【讨论】:

    • 谢谢 - 是的,一个自定义路由类查看提供的 URL,查询数据库以查看它是否存在,如果存在 - 发送到控制器
    【解决方案2】:

    这可能无法回答上面提出的具体问题,但它是相关的,此页面出现在搜索结果中,我的目标是为找到它的人(包括我猜未来的我)节省一些时间,而不必研究我的内容刚研究过。

    我需要为不同的域添加带有参数的路由。例如,example.com 应该像往常一样运行,而example.org/some_page 应该直接路由到特定的控制器和操作。所以我在Config/routes.php 中添加了以下内容:

    if ( CakeRequest::host()=='example.org' ) {
        Router::connect('/:my_variable', 
            array(
                'controller'=>'my_controller', 
                'action'=>'my_action'
            ),
            array(
                'my_variable'=>'[a-zA-Z-0-9 ]+', 
                'pass'=>array('my_variable')
            )
        );
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 2014-12-15
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多