CakePHP에서 동일한보기가있는 컨트롤러에서 두 개의 다른 버튼을 동일한 기능으로 지시 할 수 있습니까?
문제
내 CakePHP 페이지에는 두 개의 버튼이 있으며, 하나는 새 사용자를 등록하고 다른 하나는 로그인을위한 버튼이 있습니다. 버튼의 동작이 컨트롤러의 동일한 함수로 전달되고 동일한 View.ctp 파일을 가질 수 있습니까? 그렇다면 어떻게 할 수 있습니까?
해결책
예, 버튼에 올바른 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');
}
}
?>
다른 팁
CRUD 관리 페이지에서 "확인 (편집/삭제/작성/etc) 또는"취소 "를 허용하는 버튼을 만듭니다. 양식에 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의 해결책 더 나은.
글쎄, 그렇습니다. 왜 그렇지 않습니까? 양식 작업에서 적절한 URL을 설정하는 문제가 아닌가? 아니면 내가 뭔가를 놓치고 있습니까?
숨겨진 양식 값을 사용하여 어떤 동작인지 표시 할 수 있습니다.
$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');
그래도 두 기능을 사용하고 싶지 않은 이유는 명확하지 않습니다. 당신은 기본적으로 케이크가 당신을 위해 그것을하도록하는 대신 그것이 어떤 행동인지 수동으로 확인해야합니다.
컨트롤러에서
function process()
{
if ($this->data['User']['signup'] == 1)
{
// process signup
}
if ($this->data['User']['login'] == 1)
{
// process login
}
}
제휴하지 않습니다 StackOverflow