Alors voilà. Je fais un système de profil public/privé.

Dans l'url j'ai donc www.monsite.fr/profil/Username

Donc dans mes routes j'ai la règle suivante:

Router::connect('/profil/:username', array('controller' => 'users', 'action' => 'profil', 'admin'=>false,'utilisateur'=>false),array('pass'=> array('username'), 'username'=>'[A-Za-z0-9]+'));

Et dans mon Model User j'ai une fonction afterfind qui crée automatiquement le lien du profil:

$d'User']'profil'] = array(
                'controller' => 'users',
                'action' => 'profil',
                'username' => $d'User']'username'],
                'admin' => false,
                'utilisateur' => false);

Sauf que ça ne marche pas.... Quand j'affiche le lien pour paramètre mon tableau j'ai le lien suivant:

http://ej.dev/users/profil/username:Ciloe

Il ne reconnait donc pas la réécriture d'url... Or avec le même système sauf pour les articles de blog marche...

Vous avez une idée?

10 réponses


Ciloe
Auteur

Après un debug je vois que le pass ne passe rien xD

params => array(
        'plugin' => null,
        'controller' => 'users',
        'action' => 'profil',
        'named' => array(
            'username' => 'Ciloe'
        ),
        'pass' => array()
)
)

J'ai encore moins d'idées.....

Ciloe
Auteur

J'adore, à chaque fois que c'est moi qui pose une question personne ne sait répondre u_u... Ca me tue...

Du coup je UP!!

Grafikart doit savoir mais réponds pas...

Hi,
tu vois bien que tu as rien dans pass, mais tu ne vois pas que c'est dans named ?
Et j'imagine que tu n'as pas lu la doc....
Named parameters

@+

Fais voir comment ta a crée ton lien ?

Ciloe
Auteur

Si justement j'avais bien remarqué et j'ai passé pas mal de temps sur la doc...

Je ne veux pas de paramètre nomé mais passé. Enfin, je comprend pas, mon url est fabriqué de la même façon que mes post mais d'un côté ça marche et l'autre non...

Voilà comment je construit mon lien:

public function afterFind($data, $primary = false){
        foreach($data as $k=>&$d){
            if(!empty($d'User']'username'])){
                $d'User']'profil'] = array('controller'=>'users','action'=>'profil',
                    'nom' => $d'User']'username'],
                    'admin' => false,
                    'utilisateur' => false);
            }
            $data$k] = $d;
        }
        return $data;
    }

Encore une fois, de la même façon que pour les posts...

Salut,

peux tu nous envoyer ta vue aussi du coup ? Le problème peut peut être provenir du Helper HTML du coup.

Ciloe
Auteur

Dans ma vue j'ai mon lien Html...

<?php echo $this->Html->link($user'User']'username'],$user'User']'profil']); ?>

Encore une fois, ça me paraitrait bizarre que ça vienne de là... Quelqu'un a une idée?

Ciloe
Auteur

Je viens de faire un découverte.
Dans mon modèle j'ai changé ça:

$d'User']'profil'] = array('controller'=>'users','action'=>'profil',
                        $d'User']'username'],
                        'admin' => false,
                        'utilisateur' => false);

En gros j'ai pas nommé le champ et du coup ça passe... Je pense que lorsqu'il y a un seul paramètre il y a pas besoin de le nommer mais si il y en a plusieur, il faut surement le faire...

Par contre, je n'ai pas l'url www.monsite.fr/profil/Ciloe, mais www.monsite.fr/users/profil/Ciloe

Donc la réécriture ne marche pas.. Une idée?

Si non, quel code vous utiliseriez si vous vouliez réécrir l'url users/profil/:username en /profil/:username?

Ta variable est bien dans pass maintenant ? Ta route a l'air bonne donc si elle ne se fait pas, c'est qu'elle n'est pas capable de récupérer un argument.

Ciloe
Auteur

Oui dans pass j'ai ça:

aray(
    (int)0 => 'Ciloe'
)

Mais effectivement il n'arrive pas à récupéré la variable nom puisqu'elle n'est plus passé... Donc si je la met ça foire et si je la met pas, ça marche pas entièrement xD