CakePHP에서 동일한보기가있는 컨트롤러에서 두 개의 다른 버튼을 동일한 기능으로 지시 할 수 있습니까?

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

  •  03-07-2019
  •  | 
  •  

문제

내 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
    }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top