مشكلة تمرير متغيرات عنوان URL في تقديم النموذج بعد التقديم مع formhelper cakephp

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

سؤال

أنا أكتب أول تطبيق CakePhP الخاص بي وأنا فقط أكتب الجزء الثاني من نموذج إعادة تعيين كلمة المرور حيث تلقى المستخدم بريدًا إلكترونيًا يحتوي على رابط إلى الموقع وعندما ينقرون عليه ، يُطلب منهم إدخال كلمة مرور جديدة وتأكيدها.

عنوان URL للصفحة مثل هذا:

/users/reset_password_confirm/23f9a5d7d1a2c952c01afacbefaba41a26062b17

المنظر مثل:

<?php echo $form->create('User', array('action' => 'reset_password_confirm')); ?>
<?php 
    echo $form->input('password', array('label' => 'Password'));
    echo $form->input('confirm_password', array('type' => 'password', 'label' => 'Confirm password'));
    echo $form->hidden('static_hash');
?>
<?php echo $form->end('Reset password'); ?>

لكن هذا ينتج عنه شكل مثل:

<form id="UserResetPasswordConfirmForm" method="post" action="/users/reset_password_confirm/8">

المشكلة هي أن معرف المستخدم (8 في هذه الحالة) تتم إضافة إلى الإجراء. إنها ليست مشكلة هنا حقًا ، لكن عندما أرغب في المرور عبر التجزئة إلى وحدة التحكم الخاصة بي:

function reset_password_confirm($static_hash=null) {
    // function body
}

$static_hash يتم ملؤها الآن مع 8 بدلاً من التجزئة من عنوان URL.

أعلم أنه يمكنني فرز هذا عن طريق إنشاء علامة النموذج بنفسي بدلاً من الاستخدام $form->create ولكن هل هناك طريقة أكثر كعكة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

$form->create('User', array('action' => '…', 'id' => false));

فقط قم بتعيين المعلمات بشكل صريح الذي لا تريده null أو false. هذه للأسف حالة تحاول فيها Cake أن تكون ذكية قليلاً من أجل مصلحتها. ؛ س)

ربما يمكنك أيضًا القيام بشيء كهذا لنشر عنوان URL نفسه مرة أخرى:

$form->create('User', $this->here);

نصائح أخرى

ماذا عن تمريرها كمعلمة بدلاً من بيانات النموذج:

<?php
echo $form->create('User', array('action' => 'reset_password_confirm', $static_hash));
    echo $form->input('password', array('label' => 'Password'));
    echo $form->input('confirm_password', array('type' => 'password', 'label' => 'Confirm password'));
echo $form->end('Reset password');
?>

وفي وحدة التحكم:

function reset_password_confirm($static_hash = null) {

// Check if form is submitted
if (!empty($this->data)) {
  // if it submitted then do your logic
} else {
  $this->set('static_hash', $static_hash); // Else, pass the hash to the view, so it can be passed again when form is submitted
}

}

نأمل أن تكون هذه المساعدة :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top