朋友您好我是zf2的新手。我卡在一个地方。在我的项目中,我想在很多动作上调用一个视图。 我的网址是“baseurl / g / any-thing-from-from-database” 我想从另一个模块或同一个模块中调用“来自数据库的任何东西”的视图。
我的G模块在module.config.php
上有这个代码 return array(
'controllers' => array(
'invokables' => array(
'G\Controller\G' => 'G\Controller\GController',
),
),
'router' => array(
'routes' => array(
'g' => array(
'type' => 'segment',
'options' => array(
'route' => '/g[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'G\Controller\G',
'action' => 'g',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'g' => __DIR__ . '/../view',
),
),
);
在GController.php上
namespace G\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Stdlib\RequestInterface as Request;
use Zend\Stdlib\ResponseInterface as Response;
use Zend\View\Renderer\PhpRenderer;
use Students\Form\StudentsForm;
use Students\Model\Students;
class GController extends AbstractActionController
{
public function dispatch(Request $request, Response $response = null)
{
$controller = $this->params('controller');
$nicname = $this->params('action');
if($nicname !== false){
$hosts = $this->getServiceLocator()->get('Manager\Model\HostsTable');
if(($data = $hosts->findByNicname($nicname)) !== null){
$captchaService = $this->getServiceLocator()->get('SanCaptcha');
$form = new StudentsForm($captchaService);
return array('from'=>$form);
}
}
return $this->redirect()->toRoute('home',array('controller'=>'application','action'=>'index'));
}
public function gAction()
{
return new ViewModel();
}
}
要从url获取不同的操作,我使用了正常工作的调度功能。当我从数据库中获取此操作时,我想显示一个表单,其中包含来自名为Students或G的不同模块的一些内容。但此代码仅显示页眉和页脚,没有任何其他没有任何错误。请帮助我。谢谢提前。
答案 0 :(得分:0)
我认为覆盖调度方法不是很好。
我确定你没有看到任何东西,因为你没有渲染ViewModel,因此没有数据存在。这是因为您禁用了默认的调度行为并覆盖了路径中的action参数。因此,如果您打开 http://my.website/g/foobar ,那么将调用foobarAction() - 如果您的调度将正常工作。
所以你可以做的就是简单地将你的动作参数重命名为(例如)foo,将你的逻辑带到gAction()并做你用 $ this-> param('foo')所做的事情。 )