CakePHPで同じビューを持つコントローラーの同じ機能に2つの異なるボタンを向けることはできますか?

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

  •  03-07-2019
  •  | 
  •  

質問

cakephpページには、新しいユーザーを登録するためのボタンとログイン用のボタンの2つのボタンがあります。ボタンのアクションの両方をコントローラーの同じ機能に向けて、同じview.ctpファイルを使用できますか?はいの場合、どうすればいいですか?

役に立ちましたか?

解決

はい、ボタンに正しいURLを設定するだけです。しかし、なぜあなたはこれをするのか分かりません。 view.ctpを再利用するだけであれば、同じビューを使用するためだけに1つのアクションを使用する必要はありません。例:

<?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管理ページに作成します。または「キャンセル」。これを行うには、フォームに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つに壊しています。 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');

2つの関数を使用したくない理由は明確ではありません。基本的に、ケーキに実行させる代わりに、どのアクションであるかを手動で確認する必要があります。

コントローラー内

function process()
{
    if ($this->data['User']['signup'] == 1)
    {
        // process signup
    }
    if ($this->data['User']['login'] == 1)
    {
        // process login
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top