Bonjour,

Voilà mon code déjà :

<h2>Inscription</h2>

<?php echo $this->Form->create("User"); 

echo $this->Form->input("username", array("placeholder" => "Username")); 
echo $this->Form->input("mail", array("placeholder" => "Email")); 
echo $this->Form->input("password", array("placeholder" => "Password")); 
?>

<?php echo $this->Form->end('Finish'); ?>

Il s'agit de la page "signup.ctp" mais le $this->Form-end() me fais une erreur qui est celle ci :

Warning (4096): Argument 1 passed to Cake\View\Helper\FormHelper::end() must be of the type array, string given, called in H:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\Habbtips\src\Template\Users\signup.ctp on line 10 and defined [CORE\src\View\Helper\FormHelper.php, line 513]
Code Context

Y'a t-il une solution et je voudrais savoir si ( je n'est pas regardé entièrement la vidéo a cause du problème ) si on peux fair l'espace membre sur la page d'accueil ?

Si il est possible de changer le "/users/signup" par "/signup" directement

12 réponses


JC_Pires
Réponse acceptée
    class PagesController extends AppController
    {
        public function display()
        {
            $this->loadModel(['Post', 'User']);  //Ton tableau "Jamais essayé"

            sinon: 
             $this->loadModel('Post'); 
             $this->loadModel('User');
            $post = $this->Post->find() .... // Enfin ce que tu veut
            $user = $this->User->find() .... // Enfin ce que tu veut
            $this->set(compact('post', 'user'));
       }
    }

Bonjour,

tu es avec quelle version de cakePHP ?

En version 3 FormHelper::end() prend un array en paramètre facultatif...

Hello,
Pour le bug, antho07 t'a répondu, et pour changer le "/users/signup" par "/signup" :

Router::scope('/', function ($routes) {

    $routes->connect(
        '/signup',
        [
            'controller' => 'users',
            'action' => 'signup'
        ],
        [
            '_name' => 'users-signup'
        ]
    );
}

Pour utliser la route dans une vue :

$this->Url->build(['_name'=> 'users-signup']);

Oui je suis actuellement sur la dernière version donc 3.0.1 ( qui a totalement changé sauf l'API enfin moi j'ai plein de bug avec leur function ) et je dois mettre quoi comme array ? Je met label dans le array ?

Pour Xeta :

J'ai noté ton premier code dans le routes.php donc :

Router::scope('/', function ($routes) {
    /**
     * Here, we are connecting '/' (base path) to a controller called 'Pages',
     * its action called 'display', and we pass a param to select the view file
     * to use (in this case, src/Template/Pages/home.ctp)...
     */
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);

    /**
     * ...and connect the rest of 'Pages' controller's URLs.
     */
    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);

    /* ICI TON CODE >> */ $routes->connect('/signup', [ 'controller' => 'users', 'action' => 'signup'],['name' => 'users-signup']);
}

    /**
     * Connect catchall routes for all controllers.
     *
     * Using the argument `InflectedRoute`, the `fallbacks` method is a shortcut for
     *    `$routes->connect('/:controller', ['action' => 'index'], ['routeClass' => 'InflectedRoute']);`
     *    `$routes->connect('/:controller/:action/*', [], ['routeClass' => 'InflectedRoute']);`
     *
     * Any route class can be used with this method, such as:
     * - DashedRoute
     * - InflectedRoute
     * - Route
     * - Or your own route class
     *
     * You can remove these routes once you've connected the
     * routes you want in your application.
     */
    $routes->fallbacks('InflectedRoute');
});

et dans mon signup.ctp :

<h2>Inscription</h2>

<?php

$this->Url->build(['_name'=> 'users-signup']);

echo $this->Form->create("User");

echo $this->Form->input("username", array("placeholder" => "Username"));
echo $this->Form->input("mail", array("placeholder" => "Email"));
echo $this->Form->input("password", array("placeholder" => "Password"));
?>

<?php echo $this->Form->end('Finish'); ?>

Mais j'ai une erreur qui est celle ci :

Error: syntax error, unexpected '$routes' (T_VARIABLE)
File H:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb\projects\Habbtips\config\routes.php
Line: 85

C'est une erreur de syntax php.
Et c'est pas :

['name' => 'users-signup']

mais :

['_name' => 'users-signup']

Excuse moi mais bon même avec _name j'ai la même erreur.

Ah mais oui, dans ton formulaire fais ça, j'avais vu quelque part qu'il fallais maintenant mettre le bouton submit à part et ne plus passer d'argument à end(). Normalement ça devrais aller là:

    <?= $this->Form->button('Finish', ['type' => 'submit']);?>
    <?= $this->Form->end();?>

Pour ton URL attention la fonction build du helper Url renvoie l'url et non le lien dans sa balise donc n'oublie pas de le mettre dans un href:

    <a href="<?= $this->Url->build(['_name'=> 'Signup']);?>" >Mon lien </a>

Pour ta route /signup:

    $routes->connect('/signup', [ 'controller' => 'Users', 'action' => 'signup'],['_name' => 'Signup']);

Je ne mets jamais de - dans les noms de route, au pire du CamelCase mais jamais de caractère spéciaux.

Au passage Xeta, tu as vu mes messages concernant ton projet?

Je suis passé sur cakephp 2.0 et je voudrais savoir si quelqu'un passe toujours sur ce post comment ce passe le model avec la page d'accueil ? J'ai des informations a récupérer pour ma page d'accueil donc "PagesController" => home.ctp ?

D'accord merci beaucoup. Vraiment sympathique.

On peux utiliser plusieurs models ?

Par exemple je veux recupérer des informations news donc Post model et de User Model ?

Il faut que tu charges ton model dans ton controller pages:

    class PagesController extends AppController
    {
        public function display()
        {
            $this->loadModel('TonModel');  //Tu charges ton model
            $mavariable = $this->TonModel->find() .... // Enfin ce que tu veut
            $this->set(compact('maviarable'));
       }
    }

Je voulais savoir aussi comment fair les functions login et logout dans le controller PagesController ?

Vu que je voudrais avoir la box espace membre sur la page d'accueil.

Voici mon code dans UsersController que je dois déplacer dans l'accueil :

    public function login(){
        if(!empty($this->request->data)){
            if($this->Auth->login()){
                return $this->Auth->redirect();
            } else {
                die("pas logged");
            }
        }
    }

Mmm qu'est ce que tu appel la box espace memebre?