2009-04-30 19 views
2

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

答えて

1

はい、ちょうどあなたのボタンで正しい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'); 
    } 
} 
?> 
0

さて、はい、どうしてですか?これはあなたのフォームアクションに適切なURLを設定するだけの問題ではありませんか?または私は何かを逃していますか?

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 
    } 
} 
+0

この例では、 signup()とlogin() – ByteNirvana

+0

という2つの異なる機能を使用しています。うーん。 –

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が良いです。

関連する問題