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