我试图使用从元素内的控制器填充的内容,以便我可以使用内容来构建视图.
到目前为止,我有以下元素(.ctp文件)
<?php $categories = $this->requestAction('categories/menu'); ?>
<ul class="hidden">
<?php foreach ($categories as $categorie): ?>
<li><?= $this->Html->link($categorie->name, '#'); ?></li>
<?php endforeach; ?>
</ul>
Run Code Online (Sandbox Code Playgroud)
用这个控制器
class CategoriesController extends AppController
{
public function index()
{
$categories = $this->Categories->find('all');
$this->set(compact('categories'));
}
public function menu()
{
$categories = $this->paginate();
$this->set('categories', $categories);
}
}
Run Code Online (Sandbox Code Playgroud)
使用此处的代码时,我在日志中出现错误,页面上没有显示任何内容Error: [Cake\View\Exception\MissingTemplateException] Template file "Categories\menu.ctp" is missing.
.
如果我为此更改此ligne $this->set('categories', $categories);,return $categories;我的页面上会显示以下错误Error: Controller action can only return an instance of Response.
我最初尝试了本教程中的代码(抱歉滚动只是转到缓存元素之前的最后一个示例),但它会导致第二条错误消息.
我如何使用Controller从Element?
这是预期的行为,控制器需要呈现视图模板,除非通过设置Controller::$autoRender为false,通过使方法返回Response对象或使用序列化数据视图来显式禁用/绕过视图呈现.
后者是错误消息告诉您该方法应该返回的内容,请参阅http://book.cakephp.org/3.0/en/controllers.html#controller-actions
当您使用控制器方法时,
Routing\RequestActionTrait::requestAction()您将典型地返回一个Response实例.如果您具有用于普通Web请求+ requestAction的控制器方法,则应在返回之前检查请求类型Run Code Online (Sandbox Code Playgroud)// src/Controller/RecipesController.php class RecipesController extends AppController { public function popular() { $popular = $this->Recipes->find('popular'); if (!$this->request->is('requested')) { $this->response->body(json_encode($popular)); return $this->response; } $this->set('popular', $popular); } }[...]
因为看起来你只想获取和渲染模型数据,我建议查看视图单元格.
http://book.cakephp.org/3.0/en/views/cells.html
| 归档时间: |
|
| 查看次数: |
2824 次 |
| 最近记录: |