2012-02-24 65 views
0

我正在尝试为我正在构建的项目构建一种Wordpress-esque CMS系统。我希望用户能够即时创建页面,并让他们出现在网站的某些区域。从URL获取一个变量,然后将其传递给控制器​​CakePHP 2.0

我在Symfony2中做了类似的东西,在这里控制器从URL中获取一个特定的变量(如route.yml文件中定义的,通常是$ id等),然后使用控制器中的变量显示任何内容它涉及到数据库中。

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

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

回答

1

简答:取决于。

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

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

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

2

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

如果您正在寻找更加集成的东西,您可以使用CakePHP的默认路由或创建自己的路由。

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

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

随着定制路线你可以让你的网址任何你想要的。你不会被强迫进入/ controller/action模式。你可以把/archives/2012-02映射到PostsController::byMonth(2012,2),或者把/512-post-title映射到PostsController::view(512)

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

+0

中看到有关默认和自定义路线的所有信息。这是类似于我想要的。尽管我想在/之后获取变量,例如http://www.domain.com/pages/variable。所以我想要一个获取页面后变量的方法/? – mickburkejnr 2012-02-24 15:36:38

+0

你需要一个自定义路线。默认路由处理'/ controller/action/variable'类型的URL。 – Joni 2012-02-24 15:47:18

相关问题