سؤال

أحاول إنشاء استجابات خاصة بـ ajax من وحدات التحكم الخاصة بي باستخدام طريقة Request::ajax()، والتي تعمل بشكل جيد.المشكلة الوحيدة هي أن الطريقة التي قمت بإعدادها بها الآن ليست حلاً جميلاً حقًا.

وحدة التحكم الخاصة بي:

class HomeController extends BaseController {

protected $layout = 'layouts/main';

public function __construct()
{
    $this->beforeFilter('auth');
}

public function getIndex()
{
    $view = View::make('content.home.index');
    if(Request::ajax()) return $view; //For ajax calls we only want to return the content to be placed inside our container, without the layout
    $this->layout->menu = 'content.menu';
    $this->layout->content = $view;
}

}

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

يؤدي هذا إلى سؤالي الذي ربما يكون مرتبطًا بـ PHP أكثر من إطار العمل؛

هل هناك طريقة لتنفيذ فحص AJAX الخاص بي عند كل استدعاء للطريقة، دون وضعه فعليًا داخل الطريقة؟أم أن هناك حلًا آخر للحفاظ على الكود الخاص بي جافًا؟

شكرا لك مقدما!

ملاحظة:هذه هي مشاركتي الأولى في Stackoverflow، لذا لا تتردد في تصحيحي إذا ارتكبت أي أخطاء

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

المحلول

أنشئ تخطيطًا مجردًا جديدًا باسم "layouts/ajax" (أو أي اسم تريده).

    <?php echo $content ?>

في وحدة التحكم الأساسية الخاصة بك، قم بتجاوز هذا setupLayout() وظيفة.

protected function setupLayout()
{
    if ( ! is_null($this->layout))
    {
        $layout = Request::ajax() ? 'layouts/ajax' : $this->layout;
        $this->layout = View::make($layout);            
    }
}

تغيير الخاص بك getIndex() وظيفة لهذا.

public function getIndex()
{
    $view = View::make('content.home.index');
    $this->layout->menu = 'content.menu';
    $this->layout->content = $view;
}

الآن سيتم تقديم الطلبات غير المتعلقة بـ ajax باستخدام layout تم تعيينها في وحدة التحكم، حيث ستتلقى طلبات ajax كل ما تم تعيينه عليه $this->layout->content.

ملحوظة :سوف تهمل وحدة التحكم إعداد التخطيط في setupLayout(), ، إذا كانت الطريقة التي تم استدعاؤها ترجع قيمة صادقة.لذلك لن تعمل هذه الطريقة مع الوظائف الموضحة أدناه.

public function getIndex()
{
    return View::make('content.home.index');
}

نصائح أخرى

يمكنك فقط تغيير خاصية التخطيط، في المنشئ، إذا كان طلب AJAX:

giveacodicetagpre.

إذا لم يكن العمل، فحاول إعداده إلى NULL بدلا من ذلك.

لماذا تعيد عرض عبر أياكس؟هل تستخدمه لإنشاء منتجع صحي؟إذا كان الأمر كذلك هناك طرق أفضل.أنا عموما ضد إرجاع HTML عبر Ajax.

الطريق كنت سأذهب في موقعك هو عكس كيفية القيام بذلك.تقديم العرض بغض النظر عن ما، إذا كان الطلب هو AJAX، فقم بتمرير البيانات الإضافية واستعادة JS تقديم البيانات الموجودة على الصفحة.هذا في الأساس كيف تعمل معظم أطر JavaScript MVC.

آسف إذا فقدت النقطة هنا تماما، فقط استمر في افتراض هدفك النهائي بالمعلومات التي قدمتها.

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