Создание статических страниц в Symfony 1 - PullRequest
5 голосов
/ 06 января 2010

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

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

Ответы [ 6 ]

4 голосов
/ 07 января 2010

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

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

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

Затем я пишу модуль "page" (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 (без необходимости добавлять новую запись маршрутизации для каждой страницы)

4 голосов
/ 06 января 2010

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

Ваше последнее предложение может быть разделено на 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(...) и т. Д.). Если вы имеете в виду данные из разных модулей, то вам, вероятно, было бы лучше рассмотреть партиалы или компоненты для элементов страницы, которые можно использовать в разных модулях (навигация и т. Д.). См. документы Symfony для получения более подробной информации об этом.

3 голосов
/ 06 января 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.

2 голосов
/ 15 апреля 2013

Другой способ обслуживания статических страниц без необходимости написания кода контроллера - настроить маршрут примерно так:

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

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

0 голосов
/ 17 марта 2016

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

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

0 голосов
/ 08 января 2010

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

...