CakePhp Router:connect,我没有语法

| 我正在尝试连接下一个网址: 1)
/food/tips
2)
/happiness/tips/best_tips
要以下对象: 1)
controller=tips
/
action=index
/
passed_parameters=food
2)
controller=tips
/
action=index
/
passed_parameters=(happiness,best_tips)
- 编辑 - 这些路线不是固定的。 含义:我想做的是将每个带有
tips
作为操作的URL路由到Tips控制器,任何固定的(索引就足够好了)操作,并将其余的url链接到原始调用中。 像是
/any_controller/tips/any_param
/tips/index/any_params
-结束编辑- 希望现在有某种意义。 应该怎么做? (请-也请说明) 谢谢     
已邀请:
路由都是通过调用Router :: connect(\'thing catch \',\'where to send it \');完成的; 因此可以很简单:
Router::connect(\'/food/tips\', \'/tips/index/food\');
或首选方法(使用内置于网址构建器中的蛋糕)
Router::connect(\'/food/tips/*\', array(\'controller\' => \'tips\', \'action\' => \'index\', \'food\');
第一个方法采用一个字符串参数,并将其传递到另一个字符串,该字符串将是一个url,然后您必须在控制器中捕获它,并期望通过url传递参数。 第二种方法使用内置于URL前的蛋糕,该蛋糕采用具有键控制器和操作的数组(还有其他选项:http://api.cakephp.org/class/router#method-Routerurl) 第二种是首选,因为格式正确且将来具有灵活性(我认为)。 第二个方法中传递的任何参数都将作为未命名项传递到数组中。命名参数只是作为键元素传递。因此,如果我想创建一个这样的网址   / posts / index / find:all / page:2 我会这样写网址:
Router::connect(\'/url_to_catch\', array(\'controller\' => \'posts\', \'action\' => \'index\', \'find\' => \'all\', \'page\' => 2);
最后,我实际上将您的参数传递给了具名的:
Router::connect(\'/happiness/tips/best_tips\', array(\'controller\' => \'tips\', \'action\' => \'index\', \'items\' => array(\'happiness\', \'best_tips\'));
这需要您的Tips控制器中的函数如下所示:
function tips(){ $this->passedArgs[\'items\']; }
    
我建议阅读有关“路由本书”的章节,因为它将比我更好地解释事情,并且将其粘贴在此处似乎适得其反。 http://book.cakephp.org/#!/view/948/Defining-Routes 为了说明起见,我会尝试,
Router::connect(\'/food/tips\', array(\'controller\' => \'tips\', \'action\' => \'index\', \'food\'));
Router::connect(\'/happiness/tips/best_tips\', array(\'controller\' => \'tips\', \'action\' => \'index\', \'happiness\',\'best_tips\'));
这应该使事情为您工作。实际上,您要做的就是告诉Cake Routing您想要捕获的URL,因为它将使用Regex进行此操作。然后,您要告诉它要运行哪个代码。因此,这需要将Controller和Action对作为一组操作。 您还希望随后通过您的命名参数。这些将添加到控制器中的功能上,以便您可以对其进行处理。     
非常简单,只需检查手册中的路由器配置即可。您必须使用
Router
类中的
connect
方法。这接受2个参数。首先是您想要的路由(例如
food/tips
),其次是带有其实际路径的数组。因此,对于您的示例,您将执行以下操作:
Router::connect(\'/food/tips\', array(\'controller\' => \'tips\', \'action\' => \'index\', \'food\');
Router::connect(\'/happiness/tips/best_tips\', array(\'controller\' => \'tips\', \'action\' => \'index\', \'happiness\', \'best_tips\');
这等效于分别调用
TipsController->index(\'food\')
TipsController(\'happiness\', \'best_tips)
。 但是,您的路线看起来有些有趣。路由的Cake约定为
/controller/action/param1/param2/etc
,其中参数param1等是可选的,并且在未指定其他任何动作时,假定为
index
动作。 您采用的是不同的方法,我建议(如果可以)将其更改为Cake的常规路线,因为这将在以后节省很多工作,因为Cake会自动将这些路线连接到所需的方法。 所以我的建议是选择25英镑和26英镑,而不是您建议的路线。这样,您不必进行任何路由器配置。 更新 编辑后,我认为最好尝试定义自定义路线。我目前无法为您进行测试,因此您应该自己进行测试,但是在这种情况下,它将是这样的:
Router::connect(\'/:section/tips/:param\', 
    array(\'action\' => \'index\'), 
    array(
        \'section\' => \'[a-z]*\', 
        \'param\' => \'[a-z]*\'
    )
);
更新2 抱歉,我已经测试了上面的内容,但似乎没有用。     

要回复问题请先登录注册