Cakephp生成带有大写控制器名称的小写URL

时间:2014-12-03 16:29:30

标签: php url cakephp

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

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

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

应该为我生成网址

http://example.com/admins/index

不幸的是,它为我带来的是

http://example.com/Admins/index

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

我最纯粹的人拒绝通过其变形名称来识别控制器,因为那么使用url helper函数有什么好处呢?为什么我不自己写出网址?

url功能不应该影响控制器名称吗? 小写/骆驼案不是拐点过程的一部分吗? 有什么方法可以强迫这种行为吗?

由于

2 个答案:

答案 0 :(得分:0)

如果您想使用HtmlHelper,则需要始终格式化您的操作/控制器和插件:

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

或:

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

蛋糕将照顾一切。只需通过小写的下划线版本。如果您的操作是(上例中的someOtherController())

,请选择

在您的网址中也是如此 - 您访问/ admins /,而不是/ Admins / - 帮助程序以相同的方式工作。

答案 1 :(得分: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

EDIT2:刚才有了另一个想法。您可以将Html帮助程序包装到执行所需的自定义程序中。

在View / Helper / 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);
}

在Controller / AppController.php中:

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

我还没有通过测试,因此代码中可能存在错误。但这就是这个想法。