Bonjour,
j'ai une Petite question sur le sujet que je traite une erreur lié au

menu.ctp
Warning (2): Invalid argument supplied for foreach() [APP\View\Elements\menu.ctp, line 3]
PageController

```around```around```around<?phparoundclass PagesController extends AppController{around    public $uses = array('Post');aroundfunction menu(){around    $pages = $this->Post->find('all',array(around            'conditions'  => array('type'=>'page','online'=>1)around      ));around       return $pages;around        }around     aroundaround    function show($id = null,$slug = null){around   around  }around}around```around```around```

index.ctp

<?php foreach($page as $k=>$v): $v = current($v); ?>around<?php echo $this->html->link($v['name'],$v['link']); ?>around<?php endforeach; ?>around

Post.tcp

<?phparoundclass Post extends AppModel {aroundpublic function afterFind($results, $primary = false) {around     foreach($results as $k=>$d){around          if(isset($d['Post']['slug']) && isset($d['Post']['id'])){around         $d['Post']['link'] = array(around               'controller'    =>'pages',around                'action'        =>'show',around             'id'            =>$d['Post']['id'],around               'slug'          =>$d['Post']['slug'],around             );around        $data[$k] = $d;around           }around     return $data;around     }around } around}around

default.ctp

<!DOCTYPE html>around<html>around  <head>around  <meta http-equiv="content-type" content="text/html; charset=utf-8"/>around    <title><?php echo $title_for_layout; ?> </title>around    <link rel="stylesheet/less" href="<?php echo $this->Html->url('/css/bootstrap.css'); ?> ">around<?php echo $this->Html->script('less.min'); ?>around<?php echo $scripts_for_layout; ?>around  </head>around  <body>around  around      <div class="navbar">around  <div class="navbar-inner">around    <a class="brand" href="#">test</a>around<?php echo $this->element('menu'); ?> aroundaround  </div>around</div>around  </body>aroundaround<div class="container">around<?php echo $content_for_layout; ?>around</div>aroundaround    </html>

menu.tcp

<?php $pages = $this->requestAction(array('controller'=>'pages','action' =>'menu')); ?>around<nav class="navbar navbar-inverse">around<?php foreach($pages as $k=>$v): current($v); ?>around      <li> <?php echo $this->html->link($v['name'],$v['link']); ?> </li>around  <?php endforeach; ?>around</nav>around</ul>around

2 réponses


Salut, dans menu.ctp essaie :

<?php foreach($pages as $k)

et remplace les $v par $k car d'après l'erreur, elle vient de ton foreach. Fin si tu comprends l'anglais ou même si tu traduit, tu comprends que c'est car tu as un argument invalide dans ton foreach.

En espéant d'avoir aidé.

Tu es sous quel version de CakePHP ? Pourquoi il y as -til des around partout dans ton code ? et essaie d'indenter pour que ce soit plus comphrésensible.
Si tu est sous Cake 2 à première vu alors enlève le current, qui ne sert pas à grand chose si ce n'est te simplifier la vie, mais avec Cake2 tu va manger tu tableau autant en manger x), si tu est sous Cake3 ton code n'est pas bon x) et utilise plutôt $pages as $page.