在控制器中,我创建并使用我的模型
public function getAlbumTable()
{
if (!$this->albumTable) {
$sm = $this->getServiceLocator();
$this->albumTable = $sm->get('Album\Model\AlbumTable');
}
return $this->albumTable;
}
Run Code Online (Sandbox Code Playgroud)
如何在项目的其他位置使用此全局服务定位器,例如,在其他模型中,而不仅仅在任何控制器中?
С配置与数据库的连接在文件中定义:my_project/config/autoload/global.php
谢谢.
从配置构建导航:
'navigation' => array(
'default' => array(
'admin' => array(
'label' => 'Administration',
'controller' => 'index',
'action' => 'index',
'route' => 'admin/default',
),
'album' => array(
'label' => 'Album',
'controller' => 'index',
'action' => 'index',
'route' => 'album/default',
),
/* ... */
Run Code Online (Sandbox Code Playgroud)
路由配置为正确.菜单中的导航工作.链接菜单指向所需模块的所需控制器/操作.但是,在引入菜单和转换到一个或另一个菜单项时,活动同时标记两个点和"管理"和"相册".据我所知,由于控制器和动作的名称与它们相匹配的原因,但仍然存在"路线"并且它不同......不是没有为每个项目生成不同的URL ...但不知何故,尽管如此这个,他们都被标记为活跃.
路由配置:
'router' => array(
'routes' => array(
'admin' => array(
'type' => 'Literal',
'options' => array(
'route' => '/admin',
'defaults' => array(
'__NAMESPACE__' => 'Admin\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true, …Run Code Online (Sandbox Code Playgroud) ZF2最近更新到2.1.4版,数据库API已更改http://framework.zend.com/security/advisory/ZF2013-03
现在我用于子查询的代码是一个例外:
$sub = new Select('md_type');
$sub->columns(array(new Expression('COUNT(mt2.parent_id) as total')))
->where(array(
new \Zend\Db\Sql\Predicate\Expression('mt2.parent_id = mt1.id')
))
;
$subquery = new \Zend\Db\Sql\Expression("({$sub->getSqlString()})");
$select = new \Zend\Db\Sql\Select('mt1');
$select->columns(array('*', 'cnt' => $subquery));
Run Code Online (Sandbox Code Playgroud)
$ sub-> getSqlString()------>注意:在没有扩展/驱动程序支持的情况下尝试在Zend\Db\Adapter\Platform\Mysql中引用值可能会在生产环境中引入安全漏洞.
我找不到使用子查询的替代方法.请告诉我如何使用,现在如何使用子查询.谢谢!
这是错误:https://github.com/zendframework/zf2/pull/4068
在不久的将来,我认为这是固定的.
在ZF1中它的工作方式如下:
$selectColumns = array(
'*',
'orders_total' => "(".$db->select()->from("orders", array("COUNT(*)"))->where("orders.parent_id=mytable.id").")",
);
$select = $db->select()->from('mytable', $selectColumns);
Run Code Online (Sandbox Code Playgroud)
如何在ZF2中做到这一点?谢谢.
在我的控制器中,我创建了Navigation对象并将其传递给视图
$navigation = new \Zend\Navigation\Navigation(array(
array(
'label' => 'Album',
'controller' => 'album',
'action' => 'index',
'route' => 'album',
),
));
Run Code Online (Sandbox Code Playgroud)
试图使用它
<?php echo $this->navigation($this->navigation)->menu() ?>
Run Code Online (Sandbox Code Playgroud)
并得到错误:
致命错误:Zend\Navigation\Exception\DomainException:Zend\Navigation\Page\Mvc :: getHref无法执行,因为没有Zend\Mvc\Router\RouteStackInterface实例在第471行的Zend\View\Helper\Navigation\AbstractHelper.php中编写
但是我在布局中使用的导航,因此它写在这里:http://adam.lundrigan.ca/2012/07/quick-and-dirty-zf2-zend-navigation/工作.我的错是什么?
谢谢.
如何获取应用程序根目录的路径.在Zend Framework 1中,您可以使用常量APPLICATION_PATH,我们如何在Zend Framework 2中获取它?谢谢.