zf2中是否有可能只有一个控制器和一个可以重复用于不同页面的动作?
称。
Class SiteController extends AbstractActionController{
public function viewAction(){
// use for the homepage, product, category etc pages.
}
}
这可能吗?
答案 0 :(得分:3)
可以使用参数加载不同的内容。
类SiteController扩展了AbstractActionController {
public function viewAction(){
$content = $this->params()->fromRoute('slug');
// Query or logic using slug to load different content dynamically
}
}
module.config.php
'router' => array(
'routes' => array(
'site' => array(
'type' => 'literal',
'options' => array(
'route' => '/site',
'defaults' => array(
'controller' => 'Application\Controller\SiteControllerr',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'view' => array(
'type' => 'segment',
'options' => array(
'route' => '/[:slug]',
'constraints' => array(
'slug' => '[a-zA-Z0-9_-]+'
),
'defaults' => array(
'action' => 'view'
)
)
),
),
),
),
),
现在你可以拥有像
这样的路线/站点/产品 /站点/类别
答案 1 :(得分:1)
我和ZF2一起使用了PimCore,我遇到了同样的问题,每个控制器都特定于某个视图,我想通过查看Zend_View类一段时间我可以创建一个'loadView'解决这个问题的方法:
/**
* Load and render an arbitrary view.
* Path is set to the ./website/views/scripts/
* @param string $name name / path of the view relative to ./website/views/scripts/ (No leading /)
* @param array $params key => value assoc array of variables to be passed to the view.
* @return string rendered view string.
*/
protected function loadView($name, $params=array()) {
$view = new Zend_View(array('scriptPath' => './website/views/scripts/'));
if(is_object($params))
$params = (array)$params;
foreach($params as $key => $value)
$view->assign($key, $value);
return $view->render($name);
}
这对你也有用。
编辑** 当然,您可能需要将基本路径更改为您的视图文件......:)