2

为了减轻一些困惑,我完全重写了这个问题。


这是控制器:

<?php
class StaffController extends AppController{
    function test(){
        $this->data = $this->Staff->find( 'list' );
    }
}

这是整个视图:

<pre>
Count: <?php echo count( $this->data ) . "\n"; ?>
Empty: <?php echo ( empty( $this->data ) ? 'true' : 'false' ) . "\n"; ?>
Count: <?php echo count( $this->data ) . "\n"; ?>
<?php var_dump( $this->data ) ?>
</pre>

这是渲染的输出:

Count: 2
Empty: true
Count: 2
array(2) {
  [1]=>
  string(12) "Mock Staff 1"
  [2]=>
  string(12) "Mock Staff 2"
}

为什么empty()在两者都返回 Truecount()debug()显示已分配非空值时?

这是一个 CakePHP 错误吗?一个PHP错误????

如果我使用另一个变量而不是 $this->data :

function test(){
    $this->set( 'data', $this->Staff->find( 'list' ) );
}

和观点:

<pre>
Count: <?php echo count( $data ) . "\n"; ?>
Empty: <?php echo ( empty( $data ) ? 'true' : 'false' ) . "\n"; ?>
Count: <?php echo count( $data ) . "\n"; ?>
<?php var_dump( $data ) ?>
</pre>

它按预期工作:

Count: 2
Empty: false
Count: 2
array(2) {
  [1]=>
  string(12) "Mock Staff 1"
  [2]=>
  string(12) "Mock Staff 2"
}

有接盘侠吗?

4

2 回答 2

3

$this->data在蛋糕视图中很特别。当您$this->data在视图中访问时,您实际上最终调用了魔术方法View::__get(),并且empty()不适用于方法或函数 - 它仅适用于变量。正如您所发现的,将数据传递给视图的正确方法是$this->set()在控制器中使用。澄清$this一下,视图中的对象与$this控制器中的对象不同。

于 2011-11-13T06:25:32.560 回答
0

可能是 $this->data 不可访问?(奇怪,因为你在课堂上),在这种情况下:

在不可访问的对象属性上使用 empty()时,如果声明了 __isset 重载方法,将被调用。

无论哪种方式,我都会在类中添加一个函数,比如 $this->hasData() 并改用它。让 hasData 返回 $this->data 是否有元素。

于 2011-11-13T00:51:50.097 回答