Symfony statik sayfaları yapma

5 Cevap php

Symfony yeni im ve bazı basit sorular var. Ben modül sistemi anlamak için çalışıyorum, ama ben db bir model kapalı dayalı değildir, gerçek ana sayfasını veya diğer sayfaları oluşturmak nasıl anlamıyorum. Örneğin, statik bilgi veya farklı modelleri bir bilgi demet bir arada Anasayfam sahip sayfa hakkında basit.

Herkes yardımcı olabilir?

5 Cevap

Her şeyden önce, modüller veritabanından model ile sınırlı olmak zorunda değildir. Hiçbir veritabanı içeriği dayanan bir Foo modülü ve öncelikle 3 farklı modellere dayalı bir Bar modülü olabilir. Modül ayırma mantıksal yönetilebilir bölüme sitenizi kırmak için bir yoldur. Örneğin bir e-ticaret sitesi böylece bir Ürünler modülünü, Kategoriler modülü ve Sepet modülü var ve olabilir.

Sizin son cümle sonra 2 bölüme ayrılabilir:

1) Statik bilgi herhangi bir sayfada olabilir - bu "SSS" vb, ben şahsen bir "varsayılan" veya "ev" modülünü kullanmak eğilimindedir ve orada vis de çeşitli eylemler oluşturmak "Hakkımızda" ve benzeri şeyler için ise:

./symfony generate:module appname home

ve

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

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

ilgili şablon dosyaları (aboutSuccess.php, faqSuccess.php) ile.

2) A page can be comprised of data from many different models - just use your preferred ORM's method of retrieving data ve set it to the view ($this->data = MyModel->findByColumn(...) etc). If you mean data from different modules, then you'd probably be better off looking at partials or components for elements of a page that can be used across different modules (navigation etc). See the Symfony docs for more details on these.

Ben bu şekilde statik sayfaları işlemek için alışkınım.

Önce apps / frontend / config / routing.yml yeni bir giriş oluşturmak:

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

Sonra bir "sayfa" modülü (apps / frontend / modules / sayfa / eylemler / actions.class.php) yazmak:

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

Son adım, modules / sayfa / templates / indexSuccess.php bu kod koymak:

<?php include_partial($page); ?>

So all you have to do from now is to create a partial for each static page ie. apps/frontend/modules/page/templates/_home.php which you can reach at http://yousite/pages/home (without the need to add a new routing entry for every page)

Sen bir modül oluşturabilirsiniz, örneğin static denilen ve her statik sayfa için eylemleri ya da bir istek değişkene bağlı olarak sayfa sunar tek eylem oluşturabilirsiniz. Bu eylem yaptığı tek şey bir şablon yükleniyor.

Symfony Bunun için varsayılan bir modül ile gelirse iyi olurdu IMHO.

(Benim özel) modülü örneği eylemler için static:

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

Bu şablonu ile:

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

Gerçek statik siteleri tüm partials vardır.

Benim in routing.yml bu gibi görünüyor:

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

Bu şekilde sadece statik bir site eklemek ve PHP kod dokunmak zorunda değilsiniz zaman, yeni bir kısmi ve yeni bir yönlendirme girdisi oluşturmak zorunda.

Yukarıdaki dışında, statik sayfalar için bir CMS bulundurun, böylece onları mantain veya bunları değiştirmek için teknik savy insanlara ihtiyacımız olmayacak. Bu tabii ki, projeye bağlıdır.

Herhangi bir denetleyici kodu yazmak zorunda kalmadan statik sayfaları için başka bir yolu aşağıdaki gibi bir rota bir şey kurmak için:

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

Sonra sadece dal şablonu oluşturmak ve iyi çalışması gerekir.