我正在尝试为我正在构建的项目构建一种Wordpress式的CMS系统。我希望用户能够动态创建页面,并让他们出现在网站的某些区域。
我在Symfony2中做了类似的事情,其中控制器从URL中获取特定变量(在route.yml文件中定义,通常是$ id等)然后我使用控制器中的变量来显示它的任何内容与数据库有关。
然而,我不习惯CakePHP 2.0,并努力寻找我需要的东西。我知道这是可能的,但我不知道实现它的最佳方法。特别是CakePHP使用与Symfony不同的路由文件。
我如何从URL中获取变量并将其传递给控制器内部使用?
答案 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']
访问它。