3

運がなくてもCakephp2.0でElementsを使おうとしています。Postという名前のモデル、Postsという名前のコントローラー、およびさまざまなビューがあります。レイアウトには、(すべてのページ/ビューに対して)最新のニュース(たとえば2)を含むボックスを含めたいと思います。

そこで、要素dok-posts.ctpを作成しました

<?php $posts = $this->requestAction('posts/recentnews'); ?>
<?php foreach($posts as $post): ?>


<div class="Post">
....

PostsControllerに関数recentnews()を追加しました

public function recentnews(){
$posts =  $this->Post->find('all',array('order' => 'Post.created DESC','limit' => 2));
if ($this->request->is('requested')) {
    return $posts;
} else {
    $this->set('posts', $posts);
    }
}

私のレイアウトでは、default.ctpを自分の要素と呼んでいます

<?php echo $this->element('dok-posts'); ?>

問題は、このメッセージが表示されることです

Invalid argument supplied for foreach() [APP\View\Elements\dok-posts.ctp, line 9]

の直後のdok-posts.phpでデバッグすると$this->requestAction、空の行が表示されます。関数は何も返さないようですrecentnews(関数でデバッグすると、見つかった投稿を含む配列が返されます)。誰かが私が間違っていることを教えてもらえますか?

4

5 に答える 5

3

アクションが実際に呼び出されていることがわかったので、

$posts = $this->requestAction('posts/recentnews');

正しく動作しています。ここでは、明確化と拡張構成オプション(後でコードを変更するため)のために、URLの代わりにルーター配列を使用することをお勧めします

$posts = $this -> requestAction(array(
 'controller' => 'posts',
 'action' => 'recentnews'
));

さて、あなたの実際の問題に...あなたが言うので、それは常にelseブランチに入ります、

$this->request->is('requested')

期待どおりに動作しない可能性があります。これを試してください(私にとっては完璧に機能します):

if (!empty($this -> request -> params['requested'])) {
   return $posts;
}
于 2012-07-02T13:38:52.013 に答える
1

アプリコントローラーで、beforefilter関数とgetNewsElement関数を作成します。

public function beforeFilter() {
    parent::beforeFilter();
    $data = $this->getNewsElement();
    $this->set('posts',$data);
}

function getNewsElement(){
# Put Post model in uses
$posts =  $this->Post->find('all',array('order' => 'Post.created DESC','limit' => 2));
return $posts;
}

dok-posts.ctp
#Remove <?php $posts = $this->requestAction('posts/recentnews'); ?>
<?php foreach($posts as $post): ?>

<div class="Post">
....

In  PostsController
public function recentnews(){
$posts =  $this->getNewsElement();

    $this->set('posts', $posts);

}

これはあなたの問題を解決します!

于 2013-12-06T08:24:18.353 に答える
0

試す

<?php $posts = $this->requestAction('/posts/recentnews'); ?>

(先頭のスラッシュに注意してください)

于 2012-07-02T13:15:07.720 に答える
0

Cakephpのガイドの例に従いました。ifステートメントを通過しない瞬間から、コントロールに問題があるようです。

$this->request->is('requested')

だから私は削除しました

is->('requested') 

追加する

->params['requested']

そしてそれは動作します。

皆様のご協力に感謝します(特に解決策についてはwnstnsmth)。

于 2012-07-03T05:50:55.240 に答える
0
Try this

 <?php $this->requestAction('/controllerName/functionName');?>
于 2013-12-06T06:33:53.380 に答える