【问题标题】:Variable Prefixed Routing in CakePHPCakePHP 中的可变前缀路由
【发布时间】:2012-07-12 21:42:39
【问题描述】:

我正在使用 CakePHP 创建一个应用程序,它要求我在一个 CakePHP 安装中运行“多个”应用程序。像我有 n 个控制器,它们对所有应用程序的行为都相同,但它们仅在我调用数据库时有所不同 - 无论如何,我需要创建一个行为如下的路由:

/app1/controller/action/a/b/c
/app2/controller/action/a/b/c

(其中app1app2 是可以更改为任何内容的字母数字字符串)

这将被路由到类似的东西:

/controller/action/app1/a/b/c
(或对 app2 相同,依此类推)

路由路由也可能只是/controller/action/a/b/c,但我需要有一种方法可以访问控制器内的URL 的app1 / app2 部分(以便在控制器内进行进一步处理)。有没有办法在 CakePHP 中做到这一点?谢谢。

稍微相关的问题: 完成上述操作后,有没有办法设置“默认”应用名称(比如当我尝试访问 /controller/action/a/b/c 时,它会自动路由到相当于输入/global/controller/action/a/b/c?)

谢谢!

有效:我想要的只是使用路由(或任何其他可以做到这一点的 CakePHP '方法')来处理像 /foobar/controller/action/the/rest/controller/action/the/rest 这样的 URL 并将“foobar”传递给控制器,不知何故。 “Foobar”是任何字母数字字符串。

【问题讨论】:

    标签: php cakephp routing


    【解决方案1】:

    app/Config/routes.php 中添加:

    Router::connect( 
        '/:app/:controller/:action/*', 
        array(), 
        array( 'pass' => array( 'app' ))
    );
    

    这会将app 的值作为第一个参数传递给控制器​​中的操作。因此,在您的控制器中,您会执行以下操作:

    class FoosController Extends AppController {
        public function view_something($app, $a, $b, $c) { 
            // ...
        }
    }
    

    当您请求/myApp1/foos/view_something/1/2/3 时,$app 的值将是'myApp1'$a 的值将是1,等等。

    要连接其他路线,上述之前,您可以添加类似:

    Router::connect(
        '/pages/:action/*',
        array( 'app' => 'global', 'controller' => 'pages' ),
        array( 'pass' => array( 'app' )) // to make app 1st arg in controller
    );
    

    【讨论】:

    • 哇,谢谢。作为旁注,如果 /:app/ 没有通过怎么办?有没有办法为其指定默认值?就像如果我尝试去 /pages/me,它可以去 /global/pages/me 吗? :P
    【解决方案2】:

    您应该使用Model attribute -> dbconfig 来动态更改数据库,而不是路由。此外,您还应该向方法发送一些参数,通过这些参数您可以确定哪个数据库需要与您的应用程序连接。

    【讨论】:

    • dbconfig 只是我以后处理控制器中数据的一种方法 - 我想做的是使用路由向控制器发送参数 - /db_name/controller/action/the/rest /of/the/url/.如何使用路由“取出” db_name 并将其发送到相应的控制器?
    猜你喜欢
    • 2011-06-09
    • 2013-10-09
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2016-10-18
    • 1970-01-01
    • 2017-05-12
    相关资源
    最近更新 更多