CakePHP:如何在控制器内部使用视图元素

eme*_*his 9 php cakephp cakephp-2.0

我正试图弄清楚如何在控制器中使用我的一个视图元素......

我知道,我知道: "不要那样做!" (99%的时间这是正确的答案)

但我认为我其实有充分的理由.该操作正在处理返回标记的AJAX请求.返回的标记是一个列表,我在其他地方使用元素显示.因此,为了保持我的代码干,我认为这样做是合适的.

这可能吗?

Wes*_*óes 22

简单:

$view = new View($this, false);
$content = $view->element('my-element', $params);
Run Code Online (Sandbox Code Playgroud)

也:

不要做任何事!


Ser*_* S. 9

有时,您需要从视图中呈现CakePhp元素,并使用AJAX将其内容同时注入到页面中.在这种情况下,渲染元素作为来自控制器的常规视图比创建仅包含的专用视图更好<?php echo $this->element('some_element') ?>,并且可以这样做:

<?php
public function ajax_action() {
    // set data used in the element
    $this->set('data', array('a'=>123, 'b'=>456, 'd'=>678));

    // disable layout template
    $this->layout = 'ajax';

    // render!
    $this->render('/Elements/some_element');
}
Run Code Online (Sandbox Code Playgroud)


mga*_*226 5

我知道这是一个老问题,其他人已经给出了基本相同的答案,但我想指出这种方法(由Serge S.提供)......

<?php
public function ajax_action() {
    // set data used in the element
    $this->set('data', array('a'=>123, 'b'=>456, 'd'=>678));

    // disable layout template
    $this->layout = 'ajax';

    // render!
    $this->render('/Elements/some_element');
}
Run Code Online (Sandbox Code Playgroud)

...不是一个hacky解决方法,但实际上是CakePHP文档推荐的这种常见和合法用例的方法:

如果$ view以'/'开头,则假定它是相对于/ app/View文件夹的视图或元素文件.这允许直接渲染元素,在AJAX调用中非常有用.

(再次:感谢Serge S.的上述代码)