CakePHP将数据传递到元素 - php

我的控制器中有以下代码:

function index()
{
    $posts = $this->set('posts', $this->Portfolio->find('all'));

    if (isset($this->params['requested']))
    {
        return $posts;
    }
    else
    {
        $this->set('posts', $this->Portfolio->find('all'));
    }
}

我想要做的是a)显示索引的投资组合项目列表,例如/portfolio/和b)在元素内显示投资组合项目的列表,以便用户可以从站点的我的侧边栏中访问投资组合项目。

这是我的侧边栏元素:

<?php $posts = $this->requestAction('portfolio/index'); ?>
<ul>
    <?php foreach ($posts as $post): ?>
    <li><?php echo $this->Html->link($post['Portfolio']['title'], array('action' => 'view', $post['Portfolio']['id']));?></li>
    <?php endforeach; ?>
</ul>

然后在布局中这样称呼它:

<?php $this->element('portfolio-nav', array('posts' => $posts) ); ?>

但是,它给出以下错误:

Notice (8): Undefined variable: posts [APP/controllers/portfolio_controller.php, line 16]

并且不会在边栏中显示项目列表。

我很确定我在控制器中编写的内容是垃圾,因此如果有人可以帮助我使其正常工作,那将是很棒的。

谢谢

参考方案

我昨天回答了同样的问题。为什么控制器动作如此复杂?我想你只需要

function index() {
    $this->set('posts', $this->Portfolio->find('all'));
    // Make sure the model Portfolio is accessible from here, i.e. place this
    // action in PortfoliosController or load it using 
    // ClassRegistry::init('Portfolio')->find... 
}

然后,在您的index.ctp视图中:

<?php echo $this->element('foobar', array('posts' => $posts)); ?>

如果您希望能够从站点的每个页面(侧边栏或其他内容)中请求此请求,则可以使用requestAction或将$this->set...放在AppController中。如果在元素中使用requestAction,则不必在array('posts' => ...)调用中传递$this->element

好的,很显然,您需要更多的指导。让我逐步解释一下。首先,我们需要在您的beforeFilter上创建一个AppController,以便可以从应用程序中的任何位置访问$posts变量。

/app/app_controller.php

<?php
class AppController extends Controller {
    function beforeFilter() {
        parent::beforeFilter();
        $this->set('posts', ClassRegistry::init('Portfolio')->find('all'));
    }
}

接下来,我们在app/views/elements/foobar.ctp中创建一个简单的元素:

<?php debug($items); ?>

最后,我们从视图中的某个位置调用元素:

<?php echo $this->element('foobar', array('items' => $posts)); ?>

我们为$ posts(在AppController中已定义)变量分配了items键,因为我们的元素需要一个$items变量。

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…

PHP数组可以这样做吗? - php

可以说;我有一个$ friends数组,其中有2,000个不同的friendID号+我有一个带有10,000 bulletinID号的$ bulletins数组,该$ bulletins数组还将具有另一个值,该ID的用户ID是发布公告条目的用户现在可以获取所有具有与FriendsID数组中的userID匹配的userID的bulletinID号吗?甚至有可能…

phpWord中的粗体,空格和缩进文本 - php

我有一些要加粗的文本,与前几段和后几段分开并缩进。我不能让所有三个属性一起工作。这适用于粗体和空格:$section = $phpWord->addSection(); $section->addText( 'Re: Your Application for Post of Security Guard', array(�…

哪个更好的做法?从Jquery响应获取HTML - php

这只是一个问题,以了解人们如何以及如何做到这一点,但是假设用户向列表中添加了一些内容,完成后,它将运行下面的ajax并更新.user-stream-list$.ajax({ url: "user-stream-list.php", success: function(data){ $(".user-stream-list…