Создание статических страниц в Symfony 1

Я новичок в symfony и у меня есть несколько простых вопросов. Я пытаюсь понять модульную систему, но не понимаю, как создать настоящую домашнюю страницу или другие страницы, которые не основаны на модели из БД. Например, простая страница «О нас» со статической информацией или домашняя страница, представляющая собой комбинацию информации из разных моделей.

Кто-нибудь может помочь?


person Danny    schedule 06.01.2010    source источник


Ответы (6)


Прежде всего, модули не должны ограничиваться моделью из базы данных. У вас может быть модуль Foo, который не зависит от содержимого базы данных, и модуль Bar, который в основном основан на трех разных моделях. Разделение модулей — это способ логически разбить ваш сайт на управляемые разделы. Например, сайт электронной коммерции может иметь модуль «Продукты», модуль «Категории», модуль «Корзина» и так далее.

Ваше последнее предложение может быть разделено на 2 части:

1) Статическая информация может быть на любой странице — если она предназначена для таких вещей, как «О нас», «Часто задаваемые вопросы» и т. д., я лично предпочитаю использовать модуль «по умолчанию» или «домашний» и создавать там различные действия:

./symfony generate:module appname home

и

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

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

с соответствующими файлами шаблонов (aboutSuccess.php, faqSuccess.php).

2) Страница может состоять из данных из множества разных моделей — просто используйте предпочитаемый вами метод ORM для получения данных и установите его для представления ($this->data = MyModel->findByColumn(...) и т. д.). Если вы имеете в виду данные из разных модулей, то вам, вероятно, лучше искать части или компоненты для элементов страницы, которые можно использовать в разных модулях (навигация и т. д.). Подробнее о эти.

person richsage    schedule 06.01.2010
comment
Спасибо! Это работает, но как мне отредактировать файлы routing.yml, чтобы я мог получить доступ к странице, такой как host.com/about - person Danny; 08.01.2010
comment
Отлично, рад, что это сработало для вас. В файле routing.yml вы можете добавить маршрут, который просто соответствует части «действие» и всегда использует статический модуль. Я разместил пример на pastebin.com/f6b55d7a7. - person richsage; 08.01.2010

Я привык так обрабатывать статические страницы.

Сначала я создаю новую запись в apps/frontend/config/routing.yml:

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

Затем я пишу модуль «страницы» (apps/frontend/modules/page/actions/actions.class.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"));
  }
}

Последний шаг, поместите в modules/page/templates/indexSuccess.php этот код:

<?php include_partial($page); ?>

Итак, все, что вам нужно сделать с этого момента, это создать партиал для каждой статической страницы, т.е. apps/frontend/modules/page/templates/_home.php, который вы можете найти по адресу http://yousite/pages/home (без необходимости добавлять новую запись маршрутизации для каждой страницы)

person gpilotino    schedule 07.01.2010

Вы можете создать модуль, например. называется static и создает действия для каждой статической страницы или только одно действие, которое доставляет страницу в зависимости от переменной запроса. Единственное, что делает это действие, — загружает шаблон.

ИМХО, было бы хорошо, если бы 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-код.

person Felix Kling    schedule 06.01.2010
comment
вы можете напрямую использовать $request->getParameter() - person gpilotino; 06.01.2010

Еще один способ обслуживать статические страницы без необходимости писать какой-либо код контроллера — настроить маршрут следующим образом:

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

Затем просто создайте свой шаблон ветки, и он должен работать нормально.

person chrismacp    schedule 15.04.2013
comment
Будьте осторожны, этот вопрос касается Symfony 1, а не Symfony 2. - person j0k; 15.04.2013

Помимо вышеперечисленного, подумайте о том, чтобы иметь CMS для статических страниц, поэтому вам не понадобятся технически подкованные люди для их обслуживания или изменения. Это зависит от проекта, конечно.

person nacmartin    schedule 07.01.2010

Для действительно статических и независимых страниц вы можете просто создать любой файл в каталоге [pathToYourProjectRoot]/web.

Это может быть, например, [pathToYourProjectRoot]/web/assets/static_html/about.html. Затем сделайте ссылку на страницу напрямую через http://your.site.com/assets/static_html/about.html.

person S.Petrykowski    schedule 17.03.2016