symfony表单与页面实现技巧(4)

这个例子同时显示了一个Symfony链接帮助器:link_to_unless()会在作为第一个参数的测试为假的情况下输出一个常规link_to(),否则会输出一个非链接的文本,并使用简单的<span>包装。

我们测试这个页面了吗?我们应进行测试。直到我们用我们自己的眼睛来验证,这个修改才算结束。要进行测试,打开在第三天所创建的测试数据文件,并且为要显示的页面浏览添加一些问题。重新运行导入数据批处理文件,然后再一次请求主页。

为子页添加路由规则

默认情况下,页面规则如下:

现在我们利用路由规则使用这些页面更易于理解:

打开apps/frontend/config/routing.yml文件并且在顶部添加下面内容:

复制代码 代码如下:

popular_questions:
  url:   /index/:page
  param: { module: question, action: list }

并且为登陆页面添加另外的路由规则:

复制代码 代码如下:

login:
  url:   /login
  param: { module: user, action: login }

重构

模型

question/list动作执行与模型相关的代码,这也就是我们为什么要将这些代码移动到模块中的原因。用下面的代码来代替question/list动作:

复制代码 代码如下:

public function executeList ()
{
  $this->question_pager = QuestionPeer::getHomepagePager($this->getRequestParameter('page', 1));
}

并且在lib/model中的QuestionPeer.php类中添加下面的方法:

复制代码 代码如下:

public static function getHomepagePager($page)
{
  $pager = new sfPropelPager('Question', sfConfig::get('app_pager_homepage_max'));
  $c = new Criteria();
  $c->addDescendingOrderByColumn(self::INTERESTED_USERS);
  $pager->setCriteria($c);
  $pager->setPage($page);
  $pager->setPeerMethod('doSelectJoinUser');
  $pager->init();
 
  return $pager;
}

同样的想法也适用于我们昨天编写的question/show动作:Propel对象由其剥离的标题取回问题的用法应属于这个模块。所以用下面的代码来变更question/show动作代码:

复制代码 代码如下:

public function executeShow()
{
  $this->question = QuestionPeer::getQuestionFromTitle($this->getRequestParameter('stripped_title'));
 
  $this->forward404Unless($this->question);
}

在QuestionPeer.php文件中添加下面的代码:

复制代码 代码如下:

public static function getQuestionFromTitle($title)
{
  $c = new Criteria();
  $c->add(QuestionPeer::STRIPPED_TITLE, $title);
 
  return self::doSelectOne($c);
}

模板

在question/templates/listSuccess.php中显示的问题列表在将来的某些地方还会用到。所以我们将显示问题列表的模板代码放在一个_list.php片段中,并且用下面的简单代码来代替listSuccess.php的内容:

复制代码 代码如下:

<h1>popular question</h1>

<?php echo include_partial('list',array('question_pager'=>$question_pager)) ?>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3d1757dd2ec71f12ddb52b134a55e0f3.html