【问题标题】:CakePHP clarification on using set() and compact() together. Will only work w/ compact()CakePHP 对一起使用 set() 和 compact() 的说明。仅适用于 compact()
【发布时间】:2011-07-25 13:30:57
【问题描述】:

我知道 compact() 是一个标准的 php 函数。而 set() 是蛋糕专用的方法。

我正在运行一个简单的测试,将值传递给使用 ajax 生成的视图(我的控制器中的用户 render()),如果我的设置如下,它只会将值从控制器传递给视图:

$variable_name_to_pass = "Passing to the view using set() can compact()";

$this->set(compact('variable_name_to_pass'));

通过阅读手册,set() 似乎应该在没有紧凑的情况下工作。

谁能解释为什么 set() 不能单独工作?喜欢

$this->set('variable_name_to_pass');

【问题讨论】:

    标签: model-view-controller cakephp view set


    【解决方案1】:

    根据CakePHP API

    参数:

    需要混合$one

    一个字符串或一个数据数组。

    混合$two 可选 NULL

    $one 是一个字符串(然后作为键)。如果$one关联数组,则未使用,否则用作$one 键的值。

    compact 函数返回一个关联数组,该数组通过获取输入数组中指定的名称、使用它们作为键、获取这些名称所引用的变量的值并将其作为值来构建。例如:

    $fred = 'Fred Flinstone';
    $barney = 'Barney Rubble';
    $names = compact('fred', 'barney');
    
    // $names == array('fred' => 'Fred Flinstone', 'barney' => 'Barney Rubble')
    

    因此,当您将compactset 结合使用时,您使用的是set 函数的单参数形式,通过向其传递键值对的关联数组 .

    如果你只想在视图上设置一个变量,并且你想使用单参数形式,你必须以同样的方式调用set

    $variable_to_pass = 'Fred';
    $this->set(compact('variable_to_pass'));
    

    否则,可以使用set的两种参数形式:

    $variable_to_pass = 'Fred';
    $this->set('variable_to_pass', $variable_to_pass);
    

    两者都实现相同的目标。

    【讨论】:

    • 托克斯,感谢您的澄清。我对这些协同工作的确切功能有点不确定。
    • 当我们有更多的变量时,像紧凑这样的任何差异都会很快。如果设置?
    • 如何在视图文件中查看它们
    • 那些正在寻找最新(在撰写本文时)信息的人,这里是 3.7 的文档:api.cakephp.org/3.7/class-Cake.Controller.Controller.html#_set
    【解决方案2】:

    Compact 返回一个数组。所以,显然 set 正在检查它的参数以及它是否是一个数组。它知道它来自紧凑型。如果不是,它需要另一个参数,变量的值。

    【讨论】:

      猜你喜欢
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 2011-10-15
      相关资源
      最近更新 更多