Posso indirizzare due pulsanti diversi alla stessa funzione in un controller con la stessa vista in CakePHP?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Ci sono due pulsanti nella mia pagina cakephp, uno per la registrazione di nuovi utenti e l'altro per l'accesso. Entrambe le azioni del pulsante possono essere dirette alla stessa funzione nel controller e avere lo stesso file view.ctp? Se sì, come posso farlo?

È stato utile?

Soluzione

Sì, basta impostare l'URL corretto nei pulsanti. Ma non so perché lo faresti. Se si tratta solo di riutilizzare view.ctp, non è necessario utilizzare una singola azione solo per utilizzare la stessa vista. Esempio:

<?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');
    }
}
?>

Altri suggerimenti

Creo pulsanti nelle mie pagine di amministrazione CRUD che consentono " Conferma (modifica / elimina / crea / etc) " o " Annulla " ;. Lo faccio creando 2 pulsanti di invio nel modulo e dando a ciascuno un nome univoco. Ad esempio:

Visualizza codice:

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

Logica di azione:

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'altro canto, essenzialmente stai fracassando 2 azioni in una per il riutilizzo di una vista. La soluzione di Sander Marechal è migliore.

Beh, sì, perché no? Non si tratta solo di impostare l'URL appropriato nelle azioni del modulo? O mi sto perdendo qualcosa?

Puoi usare un valore di modulo nascosto per indicare quale azione è.

$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');

Non è esattamente chiaro il motivo per cui non si desidera utilizzare 2 funzioni. Fondamentalmente dovrai controllare manualmente quale azione è, invece di lasciare che la torta lo faccia per te.

Nel controller

function process()
{
    if ($this->data['User']['signup'] == 1)
    {
        // process signup
    }
    if ($this->data['User']['login'] == 1)
    {
        // process login
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top