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

#php #symfony1 #static-pages

#php #symfony1 #статические страницы

Вопрос:

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

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

Ответ №1:

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

Затем ваше последнее предложение можно разделить на 2 части:

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

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

Комментарии:

1. Спасибо! Это работает, но как мне отредактировать маршрутизацию. файлы yml, чтобы я мог получить доступ к странице, подобной host.com/about

2. Отлично, рад, что у вас это сработало. В вашем routing.yml вы можете добавить маршрут, который просто соответствует части ‘action’ и всегда использует статический модуль. Я разместил пример на pastebin.com/f6b55d7a7

Ответ №2:

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

Сначала я создаю новую запись в 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); ?>
  

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

Ответ №3:

Вы можете создать модуль, например, called 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-коду.

Комментарии:

1. вы можете напрямую использовать $request->getParameter()

Ответ №4:

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

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

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

Комментарии:

1. Будьте осторожны, этот вопрос касается symfony 1, а не Symfony 2.

Ответ №5:

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

Ответ №6:

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

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