从URL中获取变量,然后将其传递给控制器​​CakePHP 2.0

时间:2012-02-24 14:46:37

标签: cakephp url-routing cakephp-2.0

我正在尝试为我正在构建的项目构建一种Wordpress式的CMS系统。我希望用户能够动态创建页面,并让他们出现在网站的某些区域。

我在Symfony2中做了类似的事情,其中​​控制器从URL中获取特定变量(在route.yml文件中定义,通常是$ id等)然后我使用控制器中的变量来显示它的任何内容与数据库有关。

然而,我不习惯CakePHP 2.0,并努力寻找我需要的东西。我知道这是可能的,但我不知道实现它的最佳方法。特别是CakePHP使用与Symfony不同的路由文件。

我如何从URL中获取变量并将其传递给控制器​​内部使用?

2 个答案:

答案 0 :(得分:2)

变量是指GET查询字符串参数,例如/foo?key=value?您可以通过the request object$this->request->query['key']在控制器中访问它们。

如果您正在寻找更集成的东西,您可以使用CakePHP的默认路线或制作您自己的路线。

默认路由使用/controller/action/param1/param2等网址,并按位置将参数传递给操作。例如,/posts/view/521映射到view(521)中对PostsController的调用,/posts/byMonth/2012/02映射到byMonth("2012","02")的调用。

您还可以使用命名参数,网址看起来像/controller/action/key1:value1/key2:value2。在控制器操作中,您可以使用$this->params['named']['key1']读取它们。

使用自定义路由,您可以将网址设为您想要的任何内容。你没有被迫进入/控制器/行动模式;您可以将/archives/2012-02映射到PostsController::byMonth(2012,2),或将/512-post-title映射到PostsController::view(512)

通常,您会从默认路线开始,并在您决定需要时添加自定义路线。您可以在http://book.cakephp.org/2.0/en/development/routing.html

中阅读有关默认和自定义路线的所有信息

答案 1 :(得分:1)

简短回答:这取决于。

如果您希望将参数传递给函数,则根本不需要弄乱路径;每个非命名的URL路径段按顺序处理并作为方法参数传递给操作(因此/controller/action/1234将“1234”作为action控制器中controller方法的第一个参数传递类)。

命名参数允许您在URL字符串中的任何位置传递参数,并使它们成为可选参数。表单只是键:值,它们可以通过控制器中的$this->params['named']访问。

最后一个选项是前缀路由。获得速度的最佳位置自然是the CakePHP Cookbook,但一般的要点是,在路由定义中,您可以在URL中为路径组件命名,前缀为冒号,与默认路由的方式相同显示:controller:plugin:action。您可以定义任何您喜欢的名称,甚至可以选择应用正则表达式模式要求,然后通过控制器中的$this->params['variablename']访问它。