Могу ли я направить две разные кнопки на одну и ту же функцию в контроллере с одинаковым видом в CakePHP? - PullRequest
2 голосов
/ 30 апреля 2009

На моей странице cakephp есть две кнопки: одна для регистрации новых пользователей, а другая для входа в систему. Могут ли оба действия кнопки быть направлены на одну и ту же функцию в контроллере и иметь один и тот же файл view.ctp? Если да, то как я могу это сделать?

Ответы [ 4 ]

1 голос
/ 15 мая 2009

Я создаю кнопки на моих страницах администрирования CRUD, которые позволяют либо «Подтвердить (редактировать / удалить / создать / и т. Д.)», Либо «Отменить». Я делаю это, создавая 2 кнопки отправки в форме и присваивая каждому уникальное имя. Например:

Просмотр кода:

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

Логика действий:

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
    ...
  }
  ...
}

С другой стороны, вы по сути разбиваете 2 действия в одно ради повторного использования вида. Решение Сандера Маречала лучше.

1 голос
/ 10 мая 2009

Да, просто установите правильный URL в ваших кнопках. Но я не знаю, почему ты это сделал. Если речь идет только о повторном использовании view.ctp, вам не нужно использовать одно действие только для того, чтобы использовать то же представление. Пример:

<?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');
    }
}
?>
0 голосов
/ 01 мая 2009

Вы можете использовать скрытое значение формы, чтобы указать, какое это действие.

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

Не совсем понятно, почему вы не хотите использовать 2 функции. По сути, вам придется вручную проверять, какое это действие, вместо того, чтобы торт сделал это за вас.

В вашем контроллере

function process()
{
    if ($this->data['User']['signup'] == 1)
    {
        // process signup
    }
    if ($this->data['User']['login'] == 1)
    {
        // process login
    }
}
0 голосов
/ 30 апреля 2009

Ну да, а почему бы и нет? Разве это не только вопрос установки соответствующего URL в действиях формы? Или я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...