سؤال

أنا جديد على symfony ولدي بعض الأسئلة البسيطة. أحاول فهم نظام الوحدة النمطية، لكنني لا أفهم كيف أنشئ الصفح الرئيسي الفعلي أو الصفحات الأخرى التي لا تعتمد على نموذج من DB. على سبيل المثال، بسيطة حول الصفحة التي تحتوي على معلومات ثابتة أو الصفحة الرئيسية التي هي مزيج من مجموعة من المعلومات من نماذج مختلفة.

هل أستطيع مساعدتك؟

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

المحلول

بادئ ذي بدء، لا يجب أن تقتصر الوحدات النمطية على نموذج من قاعدة البيانات. يمكنك الحصول على وحدة نمطية FOO التي تعتمد على أي محتوى قاعدة بيانات، وحدبة شريط تستند أساسا إلى 3 نماذج مختلفة. فصل الوحدة النمطية هو وسيلة لتفكيك موقعك منطقيا في أقسام يمكن التحكم فيها. على سبيل المثال، قد يحتوي موقع التجارة الإلكترونية على وحدة نمطية للمنتجات وحدة الفئات وحدبة عربة وهلم جرا.

يمكن بعد ذلك تقسيم الجملة الأخيرة إلى قسمين:

1) يمكن أن تكون المعلومات الثابتة على أي صفحة - إذا كان الأمر بالنسبة للأشياء مثل "من نحن" و "التعليمات"، إلخ، فأنا شخصيا تميل إلى استخدام وحدة نمطية "افتراضية" أو "الصفحة الرئيسية"، وإنشاء الإجراءات المختلفة الموجودة هناك:

./symfony generate:module appname home

و

class homeActions extends sfActions
{
  public function executeAbout(sfWebRequest $request)
  {
    // ...
  }

  public function executeFaq(sfWebRequest $request)
  {
    // ...
  }
}

مع ملفات القالب المقابلة (Outsuccess.php، Faqsuccess.php).

2) يمكن أن تتألف صفحة من البيانات من العديد من النماذج المختلفة - ما عليك سوى استخدام طريقة Orm المفضلة لديك لاسترداد البيانات وتعيينها على العرض ($this->data = MyModel->findByColumn(...) إلخ). إذا كنت تقصد البيانات من وحدات مختلفة، فمن المحتمل أن تكون أفضل حالا في النظر في الجزر أو المكونات لعناصر الصفحة التي يمكن استخدامها عبر وحدات مختلفة (التنقل وما إلى ذلك). يرى مستندات سيمفي لمزيد من التفاصيل حول هذه.

نصائح أخرى

اعتدت التعامل مع الصفحات الثابتة بهذه الطريقة.

أولا، أقوم بإنشاء إدخال جديد في التطبيقات / الواجهة الأمامية / التكوين / Routing.yml:

page:
  url:   pages/:page
  param: { module: page, action: index }

ثم أكتب وحدة نمطية "صفحة" (التطبيقات / الواجهة الأمامية / الوحدات / الصفحة / الإجراءات / الإجراءات / الإجراءات .ass.php):

<?php
class pageActions extends sfActions
{
  public function executeIndex()
  {
    $this->page = $this->getRequestParameter("page");
    $this->forward404Unless($this->_partialExists($this->page));
  }

  protected function _partialExists($name)
  {
    $directory = $this->getContext()->getModuleDirectory();
    return (is_readable($directory.DIRECTORY_SEPARATOR."templates".
            DIRECTORY_SEPARATOR."_".$name.".php"));
  }
}

الخطوة الأخيرة، وضعت في وحدات / صفحة / قوالب / indexsuccess.php هذا الرمز:

<?php include_partial($page); ?>

لذلك كل ما عليك فعله من الآن هو إنشاء جزئي لكل صفحة ثابتة أي. التطبيقات / الواجهة الأمامية / الوحدات النمطية / الصفحة / Templates / _home.php التي يمكنك الوصول إليهاhttp: // yousite / الصفحات / المنزل (بدون الحاجة لإضافة إدخال توجيه جديد لكل صفحة)

يمكنك إنشاء وحدة نمطية، على سبيل المثال static وإنشاء إجراءات لكل صفحة ثابتة أو إجراء واحد فقط يوفر الصفحة اعتمادا على متغير الطلب. الشيء الوحيد الذي يقوم بهذا الإجراء هو تحميل قالب.

IMHO سيكون من الجيد إذا جاء Symfony مع وحدة نمطية افتراضية لهذا.

على سبيل المثال الإجراءات (مخصص) الوحدة النمطية static:

class staticActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    if(!$request->hasParameter('site')) {
        return sfView::ERROR;    
    }
    $this->site = $request->getParameter('site');
  }
}

مع هذا القالب:

//indexSuccess.php
<?php include_partial($site) ?>

مواقع الإحصاء الفعلية هي جميع الجزر.

في routing.yml يشبه هذا:

# static stuff
about:
  url: /about
  param: {module: static, action: index, site: about}

بهذه الطريقة يجب عليك فقط إنشاء إدخال جزئي جديد وتوجيه جديد عند إضافة موقع ثابت ولن تضطر إلى لمس رمز PHP.

هناك طريقة أخرى لخدمة الصفحات الثابتة دون الحاجة إلى كتابة أي رمز تحكم هي إعداد الطريق مثل ما يلي:

myStaticPage:
    pattern: /pageName
    defaults:
        _controller: FrameworkBundle:Template:template
        template: MyBundle:Home:pageName.html.twig

ثم فقط قم بإنشاء قالب Twig الخاص بك ويجب أن يعمل بشكل جيد.

بصرف النظر عن ما سبق، فكر في الحصول على CMS للحصول على صفحات ثابتة، لذلك لن تحتاج إلى أشخاص محافظين تقنيين إلى Mantain لهم أو تغييرهم. هذا يعتمد على المشروع، بالطبع.

ل هل حقا الصفحات الثابتة والمستقلية يمكنك ببساطة إنشاء أي ملف في [pathToYourProjectRoot]/web الدليل.

قد من قبل IE [pathToYourProjectRoot]/web/assets/static_html/about.htmlوبعد ثم رابط إلى الصفحة مباشرة من قبل http://your.site.com/assets/static_html/about.html.

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