5

我是 symfony 的新手,有一些简单的问题。我试图了解模块系统,但我不明白如何创建实际主页或其他不基于数据库模型的页面。例如,具有静态信息的简单关于页面或由来自不同模型的一堆信息组合而成的主页。

任何人都可以帮忙吗?

4

6 回答 6

4

首先,模块不必局限于数据库中的模型。您可以拥有一个不依赖数据库内容的 Foo 模块,以及一个主要基于 3 个不同模型的 Bar 模块。模块分离是一种在逻辑上将您的站点分解为可管理部分的方法。例如,一个电子商务站点可能有一个产品模块、一个类别模块和一个购物车模块等等。

然后你的最后一句话可以分成两部分:

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 文档

于 2010-01-06T17:17:17.693 回答
4

我习惯以这种方式处理静态页面。

首先,我在 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 访问(无需为每个页面添加新的路由条目)

于 2010-01-07T13:43:28.620 回答
3

您可以创建一个模块,例如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 代码。

于 2010-01-06T17:17:10.267 回答
2

无需编写任何控制器代码即可提供静态页面的另一种方法是设置如下所示的路由:

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

然后只需创建您的树枝模板,它应该可以正常工作。

于 2013-04-15T13:46:35.297 回答
0

除了上述之外,考虑为静态页面设置一个 CMS,这样您就不需要精通技术的人来维护或更改它们。当然,这取决于项目。

于 2010-01-07T21:07:14.620 回答
0

对于真正静态和独立的页面,您可以简单地在[pathToYourProjectRoot]/web目录中创建任何文件。

它可以通过 ie [pathToYourProjectRoot]/web/assets/static_html/about.html。然后直接通过 链接到页面http://your.site.com/assets/static_html/about.html

于 2016-03-17T08:53:34.693 回答