Espace membre CakePHP - bug form

Par Warkas Creation, il y a 11 ans


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

antho07, il y a 11 ans

Bonjour,

tu es avec quelle version de cakePHP ?

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

Xeta, il y a 11 ans

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']);
Warkas Creation, il y a 11 ans

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

Xeta, il y a 11 ans

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

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

mais :

['_name' => 'users-signup']
Warkas Creation, il y a 11 ans

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

JC_Pires, il y a 11 ans

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?

Warkas Creation, il y a 11 ans

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 ?

Warkas Creation, il y a 11 ans

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 ?

JC_Pires, il y a 11 ans

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')); } }
JC_Pires, il y a 11 ans
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')); } }
Warkas Creation, il y a 11 ans

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"); } } }
JC_Pires, il y a 11 ans

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