Ben CakePHP'de aynı manzaralı bir denetleyicisi aynı fonksiyona iki farklı düğmelere yönlendirebilirsiniz?

4 Cevap php

Yeni kullanıcılar ve giriş için diğeri tescili için benim cakephp sayfasında, bir iki düğme vardır. Düğmenin eylem denetleyicisi aynı işlevi yönettiği ve aynı view.ctp dosyayı sahip olabilir hem de? Evet, ben bunu nasıl yapabilirim?

4 Cevap

Evet, sadece düğmeleri doğru URL'yi ayarlayın. Bunu neden ama bilmiyorum. Sadece view.ctp yeniden kullanımı ile ilgili ise, o zaman sadece aynı görünümü kullanmak için tek bir eylem kullanmak gerekmez. Örnek:

<?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');
    }
}
?>

Ben izin benim REZİL yönetici sayfalarında düğmeler oluşturmak "Onayla (edit / silme / create / etc)" veya "İptal" ya. Ben 2 şeklinde gönderme düğmeleri oluşturma ve her bir benzersiz bir ad vererek bunu. Örneğin:

Görünüm kodu:

...
$form->submit('Delete', array('name' => 'delete'));
$form->submit('Cancel', array('name' => 'cancel'));
...

Eylem mantığı:

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
    ...
  }
  ...
}

Kapak tarafında, aslında bir görünümü yeniden uğruna birine 2 eylemleri eziyorsunuz. Sander Marechal's solution iyidir.

Evet, neden olmasın? Bu form eylemlere uygun URL'yi ayarı sadece bir konu değil mi? Ya ben bir şey eksik?

Bunu hangi eylem belirtmek için gizli bir form değerini kullanabilirsiniz.

$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');

Eğer olsa 2 işlevleri kullanmak istemiyorum neden tam olarak belli değildir. Bu temelde elle yerine kek sizin için bunu yapmak icar, hangi eylem denetlemek zorunda olacak.

Sizin denetleyicisi

function process()
{
    if ($this->data['User']['signup'] == 1)
    {
        // process signup
    }
    if ($this->data['User']['login'] == 1)
    {
        // process login
    }
}