Puis-je diriger deux boutons différents vers la même fonction dans un contrôleur avec la même vue dans CakePHP?

StackOverflow https://stackoverflow.com/questions/806262

  •  03-07-2019
  •  | 
  •  

Question

Il y a deux boutons dans ma page cakephp, un pour enregistrer de nouveaux utilisateurs et l'autre pour se connecter. L'action du bouton peut-elle être dirigée vers la même fonction dans le contrôleur et avoir le même fichier view.ctp? Si oui, comment puis-je le faire?

Était-ce utile?

La solution

Oui, il suffit de définir l’URL correcte dans vos boutons. Mais je ne sais pas pourquoi tu ferais ça. S'il s'agit simplement de réutiliser le fichier view.ctp, il n'est pas nécessaire d'utiliser une seule action pour utiliser simplement la même vue. Exemple:

<?php
class FoobarController extends AppController
{
    function view()
    {
        // This will render views/foobar/view.ctp because the action
        // is named "view"
    }

    function register()
    {
        // Normally this would render views/foobar/register.ctp but you can
        // call the render() function manually and render something else. The
        // following call will render views/foobar/view.ctp
        $this->render('view');
    }

    function login()
    {
        // Same thing here...
        $this->render('view');
    }
}
?>

Autres conseils

Je crée dans mes pages d’administration CRUD des boutons permettant "Confirmer (modifier / supprimer / créer / etc.)". ou "Annuler". Pour ce faire, je crée 2 boutons de soumission dans le formulaire et leur attribue un nom unique. Par exemple:

Code de vue:

...
$form->submit('Delete', array('name' => 'delete'));
$form->submit('Cancel', array('name' => 'cancel'));
...

Logique d'action:

function admin_delete( ... ) {

  // Bail if cancel button pressed
  if (isset($this->params['form']['cancel'])) {
    $this->redirect('/');
  }

  // Delete if delete button pressed
  if (isset($this->params['form']['delete'])) {
    // delete stuff
    ...
  }
  ...
}

D'un autre côté, vous mélangez essentiellement deux actions en une pour réutiliser une vue. La solution de Sander Marechal est meilleure.

Eh bien, oui, pourquoi pas? N’est-ce pas seulement une question de définir l’URL appropriée dans vos actions de formulaire? Ou est-ce que je manque quelque chose?

Vous pouvez utiliser une valeur de formulaire masquée pour indiquer son action.

$form->create('User', array('action' => 'process');
$form->hidden('User.signup', array('value' => '1'));
$form->end('Signup');

$form->create('User', array('action' => 'process');
$form->hidden('User.login', array('value' => '1'));
$form->end('Login');

La raison pour laquelle vous ne souhaitez pas utiliser 2 fonctions n’est pas tout à fait claire. En gros, vous devrez vérifier manuellement quelle action il s'agit, au lieu de laisser Cake le faire pour vous.

Dans votre contrôleur

function process()
{
    if ($this->data['User']['signup'] == 1)
    {
        // process signup
    }
    if ($this->data['User']['login'] == 1)
    {
        // process login
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top