Bonjour,
Je bloque sur un petit problème concernant les tableaux en php .
Mes liens sont sous la forme www.site.com/category/product-3
Je vérifie donc dans mon controller que le param n°2 (la catégorie) existe, si non, la page 404 s'affiche .
Voilà mon controller :
public function product()
{
$allowed_cat = $this->category_model->getAll();
if(in_array($this->uri->segment(1),$allowed_cat))
{
$slug= $this->uri->segment(2);
$data'product'] = $this->produt_model->getOneProduct($slug);
if(!$data'product'])
{
show_404();
}
else
{
echo '<pre>';
print_r($data'product']);
}
}
else
{
show_404();
}
}
Le problème c'est que j'ai une 404 qui s'affiche à chaque fois !
Petites informations : $this->uri->segment(1) représente le param 1 (sois www.site.com/ category ).
Et mon tableau $allowed_cat est sous la forme [x]{ id => '...', name => '...', description => '...'}
Auriez vous une idée ?
Cordialement
Edit :
Je viens de remplacer le tableau $allowed_cat par des valeurs à la main sans indice , comme ça :
$allowed_cat = array('culture,'enseignement','biologie','sport','nature','voyage');
Et cela à l'air de fonctionner. Il faudrait donc que mon modèle me renvois un tableau sous cette forme, obligatoirement ?
Ok j'avais compris que tes urls étaient category/1 ou category/2 etc
Du coup comme tu reçois un tableau de stdClass, je pense que tu devrais faire un foreach pour vérifier qu'un objet stdClass contient ta rubrique dans son attribut name
$found = false;
$allowed_cat = $this->category_model->getAll();
foreach($allowed_cat as $cat) {
if($this->uri->segment(1) == $cat->name) { //si category est trouvé sur l'attribut name de ma stdClass, donc présent en base
$found = true;
}
}
if($found) {
$slug= $this->uri->segment(2);
$data'product'] = $this->produt_model->getOneProduct($slug);
if(!$data'product']) {
show_404();
}
else {
echo '<pre>';
print_r($data'product']);
}
}
else {
show_404();
}
Si tu veux vérifier que ta catégorie existe, il ne faut donc pas vérifier que l'id de la catégorie existe ?
Du coup, ce serait pas
if(in_array($this->uri->segment(2),$allowed_cat))
{
....
}
au lieu de
if(in_array($this->uri->segment(1),$allowed_cat))
{
....
}
par hasard ?
Parce que là tu vérifies que "category" existe
Peut être même $allowed_cat'id'] parce que je n'ai pas trop compris la forme de la sortie de $this->category_model->getAll()
Voici la sortie du model :
Array
(
[0] => stdClass Object
(
[id] => 1
[name] => culture
[description] => tata, toto, tonton
)
[1] => stdClass Object
(
[id] => 2
[name] => biologie
[description] => pruneau, pomme, pêche
)
[2] => stdClass Object
(
[id] => 3
[name] => sport
[description] => tic, tac, toc
)
)
@pewell, la "category" change hein ? mes urls vont êtres www.site.com/biologie/aimer-les-animaux ou encore www.site.com/sport/curling-pour-toujours" .
@Vallyan, le segment 1 correspond au nom de la catégorie
Logique, simple, évident ...
Bien le merci Pewel ! Je t'envois une cuillère de Nutella pour te remercier haha