يمكنني توجيه اثنين من الأزرار مختلفة لنفس الوظيفة في وحدة تحكم مع وجهة النظر نفسها في للكيك؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

وهناك اثنين من الأزرار في الصفحة للكيك بلدي، واحدة للتسجيل المستخدمين الجدد والآخر لتسجيل الدخول. يمكن أن توجه كل من عمل على الزر لنفس الوظيفة في وحدة تحكم ولها نفس الملف 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 التي تسمح إما "تأكيد (تحرير / حذف / إنشاء / الخ)" أو "إلغاء". أفعل ذلك من خلال خلق 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 الإجراءات في واحدة من أجل إعادة استخدام طريقة عرض. ساندر ماريشال في حل هو أفضل.

حسنا، نعم، لماذا لا؟ ليس هذا فقط مسألة تحديد 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