有人可能会提供一些技巧和/或示例控制器插件和动作助手是如何不同的?是否存在可以用一个而不是另一个完成特定任务的情况?对我来说,他们看起来或多或少都是一样的,我经常无法决定何时使用什么......有什么大不同之处吗?
我已经体验过Zend Framework 1,并且我已经使用该框架构建了一些应用程序.
现在,我正在试验Zend Framework 2,但我坚持使用url参数.我设置了这样的路由:
// Setup for router and routes
'Zend\Mvc\Router\RouteStack' => array(
'parameters' => array(
'routes' => array(
'default' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/[:slug]',
'constraints' => array(
'slug' => '[a-zA-Z][a-zA-Z0-9_\/-]*'
),
'defaults' => array(
'controller' => 'Htmlsite\Controller\BootController',
'action' => 'index',
'slug' => 'home'
),
),
),
'home' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Htmlsite\Controller\BootController',
'action' => 'index',
),
),
),
), …Run Code Online (Sandbox Code Playgroud) 到目前为止,我已经想通了如何返回Zend框架2.首先一个典型的JSON响应,我加入ViewJsonStrategy到strategies了部分view_manager配置.然后,ViewModel我返回一个JsonModel设置了所有变量的实例,而不是从控制器操作返回一个实例.
既然我已经想到了这一点,我需要了解如何渲染视图并在JSON响应中返回它.在ZF1中,我能够使用$this->view->render($scriptName),它将HTML作为字符串返回.在ZF2中,该Zend\View\View::render(...)方法返回void.
那么......我如何渲染HTML视图脚本并在一个请求中以JSON响应返回它?
这就是我现在所拥有的:
if ($this->getRequest()->isXmlHttpRequest()) {
$jsonModel = new JsonModel(...);
/* @todo Render HTML script into `$html` variable, and add to `JsonModel` */
return $jsonModel;
} else {
return new ViewModel(...);
}
Run Code Online (Sandbox Code Playgroud) 我知道使用ZF1,您将使用自定义View Helpers检索模块/控制器名称,这将获得单例frontController对象并获取其名称.
使用ZF2,因为他们已经废除了很多框架的单独性质,并引入了DI,我为这个模块中的所有控制器指定了别名...我可以想象我会通过访问DI或者注入当前名称进入布局.
任何人都知道你会怎么做.我想有一百种不同的方法,但在嗅了几个小时的代码后,我无法弄清楚它现在应该如何完成.
我想要控制器名称的原因是将它作为特定控制器样式的类添加到主体.
谢谢,Dom
使用Zend Framework中设置的标准MVC,我希望能够显示具有锚点的页面.现在我只是在.phtml文件中添加一个我想要的'#anchor'的无意义参数.
<?= $this->url(array(
'controller'=>'my.controller',
'action'=>'my.action',
'anchor'=>'#myanchor'
));
Run Code Online (Sandbox Code Playgroud)
这将URL设置为/my.controller/my.action/anchor/#myanchor
有没有更好的方法来实现这一目标?导航到锚链接后,额外的项参数将在用户的URL中设置,这是我不想发生的事情.
我在Foo Controller中有一个Action方法,它需要参数:
public function fooAction($one, $two) {
$a = one;
$b = $two;
}
Run Code Online (Sandbox Code Playgroud)
我需要从一些Boo Controller 的其他方法转发到该方法.其中一个参数必须是参考参数.手册的唯一例子是:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo'));
Run Code Online (Sandbox Code Playgroud)
没有任何其他参数.但他们写道:
$ params是一个可选的参数数组,用于查看此特定请求的RouteMatch对象.
所以,我尝试过:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'one' => &$one,
'two' => $two,
));
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
有没有办法将其他参数传递给前向控制器?
UPD:
这些也不起作用:
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'params' => array(
'one' => &$one,
'two' => $two,
)));
$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
'action' => 'boo',
'options' => array(
'one' => &$one,
'two' …Run Code Online (Sandbox Code Playgroud) php zend-framework-mvc zend-framework2 zend-framework-routing
我知道这已经在其他线程中得到了广泛的介绍,但是我很难弄清楚如何从ZF3控件中的ZF2控制器复制$ this-> getServiceLocator()的效果.
我尝试使用我在这里和其他地方找到的各种其他答案和教程来创建一个工厂,但最终却陷入了混乱,所以我粘贴了我的代码,就像我开始希望那样有人可以指出我正确的方向吗?
来自/module/Application/config/module.config.php
'controllers' => [
'factories' => [
Controller\IndexController::class => InvokableFactory::class,
],
],
Run Code Online (Sandbox Code Playgroud)
来自/module/Application/src/Controller/IndexController.php
public function __construct() {
$this->objectManager = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$this->trust = new Trust;
}
Run Code Online (Sandbox Code Playgroud) 我们目前在我们的网站上使用Zend Framework和MVC模式.我们有大量的静态页面,这些页面位于站点的随机区域.这些页面不是简单的HTML页面,它们可以完全绕过ZF ......它们将参与Zend_Layout等.
在不为每个随机页面创建单独的操作/控制器的情况下,提供这些页面的最佳方法是什么?重做页面的布局,使它们都属于"misc"控制器或某些东西不是一个选项,页面需要保持在我们的URL层次结构中用于SEO目的.
我的目标是要求登录某些页面.我正在使用Zend Framework MVC,我正在尝试找到有关最佳实践的示例.
关于我正在寻找的一些注意事项:
或者完全不同的东西.我是Zend框架的新手,我想以"正确的方式"做到这一点.
默认情况下,页面在Applicationmodule.config数组中设置如下:
'template_map' => array(
'error/404' => __DIR__ . '/../view/error/404.phtml'
Run Code Online (Sandbox Code Playgroud)
我想改变页面.我想要新ViewModel的变量充满变数.这意味着仅仅更改模板是不够的:
'error/404' => __DIR__ . '/../view/error/my_new_404_template.phtml'
Run Code Online (Sandbox Code Playgroud)
但我无法理解如何制作它.我无法看到请求的方式'error/404'.
如何ViewModel为它创造新的?
如何将变量附加到它?
如何通过路线来'error/404'改变它?
例如,我有这样的'error/404'页面方法:
public function pageNotFoundAction() {
$view = new ViewModel();
$view->setTemplate('error/404'); // set my template
$sm = $this->getServiceLocator()->get('SessionManager');
$cont = new Container('SomeNamespace', $sm);
$view->var1 = $cont->offsetGet('someValue1'); // the "error/404" template
$view->var2 = $cont->offsetGet('someValue2'); // is full of variables
$view->var3 = $cont->offsetGet('someValue3');
$view->var4 = "One more view variable";
// And now …Run Code Online (Sandbox Code Playgroud) php zend-framework-mvc zend-view http-status-code-404 zend-framework2