【问题标题】:difference between $this->params['url'] and $this->params['named']$this->params['url'] 和 $this->params['named'] 的区别
【发布时间】:2012-03-14 17:54:18
【问题描述】:

我正在阅读有关 $params 的 CakePHP 手册,并且想知道每种方法的适当用法是什么?我知道返回的数组略有不同('url'实际上有一个名为'url'的数组键返回控制器/动作,而'named'没有。有人可以举一个例子说明为什么它很重要使用一个而不是另一个?(我也看到了 url 中的结构差异,但不知道为什么 key:value 和 key=value 之间的差异)

【问题讨论】:

  • 命名参数的一个优点是 URL 更具可读性,因此更适合 SEO。

标签: cakephp


【解决方案1】:

TLDR: 对于 CakePHP 2.x:是使用 params['named'] 还是 params['url'] 仅取决于您要查找的数据。 'url' 返回域后整个 url 的字符串'named' 返回一个数组,其中包含任何传递的“命名”变量(逗号分隔的键:值对)


CakePHP 3.x:没有“命名”变量


更深入的解释:

了解为什么要使用其中一个的最佳方法是在视图中调试参数:

调试($this->params);

您会看到,params 数组中有很多数据。例如,使用我的网址:http://www.example.com/dashboards/index/1/2/blah:test

params => array(
    'plugin' => null,
    'controller' => 'dashboards',
    'action' => 'index',
    'named' => array(
        'blah' => 'test'
    ),
    'pass' => array(
        (int) 0 => '1',
        (int) 1 => '2'
    ),
    'models' => array(
        'Dashboard' => array(
            'plugin' => null,
            'className' => 'Dashboard'
        ),
        //...
    )
)
data => array()
query => array(
    'dashboards/index/1/2/blah:test' => ''
)
url => 'dashboards/index/1/2/blah:test'
base => ''
webroot => '/'
here => '/dashboards/index/1/2/blah:test'

如您所见,它包含大量数据。仅通过查看数据即可解释您“为什么要使用“命名”与“网址”的问题。

$this->params['url'] 返回字符串'dashboards/index/1/2/blah:test'(在大多数情况下不是很有用)。

$this->params['named'] 返回命名变量的键/值数组(在这种情况下,只有一个变量):array('blah' => 'test');(如果这是我们正在寻找的更有用)

所以...答案是,如果您想要命名变量,请使用 'named' - 如果您想要将 URL 的结尾作为字符串,请使用 'url'。

【讨论】:

  • 手册解释了这一点,它只是没有给出“为什么”.....因为'url'还为您提供了控制器和操作,例如,如果您需要制作一个允许您更改控制器和操作以保持干燥的功能?而“命名”只是返回的项目更少/使用的内存更少?
  • @Dave 绝妙的回答 :)
【解决方案2】:
$this->params['url']

存储当前请求的 URL,以及 get 变量的键值对。例如,如果 URL

/posts/view/?var1=3&var2=4 被调用,$this->params['url'] 看起来像这样:

[url] => Array
(
 [url] => posts/view
 [var1] => 3
 [var2] => 4
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多