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 ?

6 réponses


Pewel-OutOfNutella
Réponse acceptée

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()

Du coup $this->uri->segment(1) correspond au x, a l'id, au name ou a la description ?

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

Haha avec plaisir Benjamin :)