我可以在CakePHP中具有相同视图的控制器中将两个不同的按钮指向同一个功能吗?

时间:2009-04-30 10:11:39

标签: php cakephp

我的cakephp页面中有两个按钮,一个用于注册新用户,另一个用于登录。按钮的动作是否可以指向控制器中的相同功能并具有相同的view.ctp文件?如果是,我该怎么做?

4 个答案:

答案 0 :(得分:1)

是的,只需在按钮中设置正确的网址即可。但我不知道你为什么会这样做。如果它只是重​​新使用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');
    }
}
?>

答案 1 :(得分:1)

我在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个动作粉碎成一个。 Sander Marechal's solution更好。

答案 2 :(得分:0)

嗯,是的,为什么不呢?这不仅仅是在表单操作中设置适当的URL吗?或者我错过了什么?

答案 3 :(得分:0)

您可以使用隐藏的表单值来表示它是哪个操作。

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