2014-12-03 127 views
0

我正在使用Cakephp 2 我一直在重新考虑我的代码使用Html-> url()函数而不是硬编码Web地址。对于那些不熟悉的人,我传递一个包含控制器和动作名称的混合$ url变量。Cakephp生成小写的URL与大写控制器名称

我的直觉告诉我,我应该根据文件名和根据控制器内部函数名称的动作定义控制器。 即: 路由到AdminsController ::指数()我会说

$this->Html->url(array(
    'controller'=>'Admins' 
    ,'action'=>'index' 
)); 

应该生成我的URL

http://example.com/admins/index 

不幸的是,它产生了对我来说是

http://example.com/Admins/index 

*注意大写“A”在管理员中。

最纯粹的我拒绝通过其变形的名称来识别控制器,因为那么使用url helper函数有什么优势?为什么我不能自己写邮件呢?

url函数不应该使inflecting控制器名称? 是不是小写字母/骆驼情况是变形过程的一部分? 有什么办法可以强制这种行为?

感谢

回答

0

如果定义在routes.php文件下列路线,您将有你好看小写网址:

Router::connect('/admins/index', array(
    'controller' => 'Admins', 
    'action' => 'index' 
)); 

编辑:其他的建议,你也可以考虑定义自定义路由会自动小写动作和控制器时,解析路线网址: http://book.cakephp.org/2.0/en/development/routing.html#custom-route-classes

编辑2:刚刚得到另一个想法。你可以将Html helper包装成一个自定义的执行你想要的东西。

在View /助手/ CustomHtmlHelper.php:

<?php 
App::uses('HtmlHelper','View/Helper'); 

class CustomHtmlHelper extends HtmlHelper { 

public function url($url = null, $full = false) 
{ 
    if(is_array($url)) { 
     if(isset($url['controller']) { 
      $url['controller'] = strtolower($url['controller']); 
     } 
     if(isset($url['action']) { 
      $url['action'] = strtolower($url['action']); 
     } 
    } 
    return parent::url($url, $full); 
} 

在控制器/ AppController的。php:

public $helpers = array('Html' => array('className' => 'CustomHtml')); 

我还没有测试,所以可能会出现代码错误。但这是这个想法。

+0

我必须为我的所有控制器做到这一点? – isick 2014-12-04 17:51:23

+0

我想是的..但我编辑我的答案,以分享其他可能的解决方案。 – PGBI 2014-12-04 18:30:16

+0

CustomHelper似乎是最好的解决方案。谢谢! – isick 2014-12-08 17:18:19

0

如果你希望使用的HtmlHelper,你需要总是格式化你的行动/控制器和插件这样的:

$this->Html->url(array(
    'controller'=>'admins' 
    ,'action'=>'index' 
)); 

或:

$this->Html->url(array(
    'controller'=>'controllers' 
    ,'action'=>'some_other_action' 
)); 

蛋糕会照顾一切。只要通过小写的下划线版本即可。如果你的动作是(在上面的例子中是someOtherController()),则包括

在你的URL中是一样的 - 你访问/ admins /,而不是/ Admins/- 帮助器的工作方式是一样的。

+0

我在说我希望能够用大写字母来编写控制器名称。 'controller'=>'Admins'并让它仍然呈现小写url – isick 2014-12-04 17:44:54

+0

然后,您将需要创建自定义路由以在生成url之前对其进行操作。这是食谱如何做到这一点。或者您可以创建一个帮助程序来接受大写的控制器名称作为默认HTML帮助程序的包装,并将该小写版本推迟到HTML帮助程序。 – 2014-12-05 18:23:26