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

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

Кто-либо может помочь?

5
задан Gianfranco P. 2 June 2017 в 15:19
поделиться

4 ответа

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

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

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

./symfony generated: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 для получения более подробной информации по этим вопросам.

4
ответ дан 18 December 2019 в 14:46
поделиться

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

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

Последний шаг, вставляю модули/страницу/шаблоны/indexSuccess.php этот код:

<?php include_partial($page); ?>

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

.
4
ответ дан 18 December 2019 в 14:46
поделиться

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

0
ответ дан 18 December 2019 в 14:46
поделиться

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

3
ответ дан 18 December 2019 в 14:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: