CakePHP3 迭代模型不起作用

Posted

技术标签:

【中文标题】CakePHP3 迭代模型不起作用【英文标题】:CakePHP3 iterating model not working 【发布时间】:2015-12-15 17:33:53 【问题描述】:

我是第一次安装 cakephp 3。认为对于我的新项目来说,迁移到最新版本的框架是个好主意。现在我在新的 ORM 上撞墙。我已经广泛阅读了这些文档,并且我认为它应该如何工作。对于我的一生,我无法从可以迭代的数据库中获得结果。我可以获取返回的结果并手动访问索引并查找数据,但如果我尝试迭代,我会不断收到关于未定义变量的错误。

控制器:

$this->loadModel('Users');
$this->set('users', $this->paginate($this->Users));
$this->set('_serialize', ['users']);

查看:

<? foreach($users as $user)  ?>
    <?= $user->name ?>
<?  ?>

我烘焙了模型、视图和控制器。我现在正试图开始从数据库中提取数据并对其进行迭代。我已经尝试了无数在结果上使用集合和 toArray() 的变体,但文档似乎描述的任何内容都没有实际工作。

什么是获得一堆结果并将它们放入可以在控制器或视图中迭代它们的点的最可靠和正确的方法?

视图中显示的错误:

Notice (8): Undefined variable: user [APP/Template/Pages/display.ctp, line 23]

完整的日志条目:

2015-12-15 22:48:57 Notice: Notice (8): Undefined variable: user in [/Library/Server/Web/Data/Sites/Default/chronoticker/chronoticker/src/Template/Pages/display.ctp, line 23]
Trace:
Cake\Error\BaseErrorHandler::handleError() - CORE/src/Error/BaseErrorHandler.php, line 140
include - APP/Template/Pages/display.ctp, line 23
Cake\View\View::_evaluate() - CORE/src/View/View.php, line 971
Cake\View\View::_render() - CORE/src/View/View.php, line 931
Cake\View\View::render() - CORE/src/View/View.php, line 579
Cake\Controller\Controller::render() - CORE/src/Controller/Controller.php, line 611
Cake\Routing\Dispatcher::_invoke() - CORE/src/Routing/Dispatcher.php, line 120
Cake\Routing\Dispatcher::dispatch() - CORE/src/Routing/Dispatcher.php, line 87
[main] - ROOT/webroot/index.php, line 37

进行一些额外的测试后,我发现我认为情况确实如此。看起来视图拒绝做任何迭代的事情。

<pre>
<?= print_r($user_list[3]) ?> //Will work and return an array of data
</pre>

<? foreach($user_list as $aUser)  ?>
    <?= $aUser['name'] ?> //Does not work. Kicks error about undefined variable
<?  ?>


<? for($x = 0; $x < count($user_list); $x++)  ?>
    <?= $user_list[$x]['name'] ?> //Does not work. gives undefined variable error for $x
<?  ?>

【问题讨论】:

每当收到错误时,请发布 completeexact 错误消息,并附上相应的堆栈跟踪(最好来自日志,它的格式是适当地)。此外,CakePHP 错误页面/通知会输出有用的上下文信息(如涉及的变量、参数等)。 我已经编辑并添加了额外的信息。 【参考方案1】:

鉴于没有定义 $user 变量,我怀疑循环没有被执行,很可能是因为您的 PHP 安装禁用了 short open tags

查看生成的页面源代码,您可能会找到 PHP 代码。简单修复,不要使用短开标签,改用&lt;?php

【讨论】:

这绝对是它。在 php.ini 中启用短标签后,它仍然不允许我使用短标签。我已将代码更改为不使用短标签,它工作正常。伙计,追这个真是浪费时间。

以上是关于CakePHP3 迭代模型不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 3 的关联限制不起作用

CakePHP 3 - beforeSave 回调在编辑时不起作用

Cakephp 在 IIS 中不起作用?

迭代lua表不起作用

我的迭代器实现不起作用,它有啥问题?

为啥压缩函数和可迭代的结果不起作用? [复制]