CakePHPで同じビューを持つコントローラーの同じ機能に2つの異なるボタンを向けることはできますか?
質問
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
}
}
所属していません StackOverflow