如何从控制器访问我的模块配置?
我最近开始使用Zendframework 2构建应用程序,我在ZF1方面有很好的经验,我在ZF2面临的主要问题是会话.
这是我创建会话容器的方式.
use Zend\Session\Container;
Run Code Online (Sandbox Code Playgroud)
//会话容器创建:(以前我们将其称为命名空间)
$session_user = new Container('user');
$session_user_errors = new Container('usererrors');
$session_user_shares = new Container('usershares');
Run Code Online (Sandbox Code Playgroud)
现在像这样我有几个容器,
我可以清除这样一个特定容器的钥匙
//通过键从会话中获取值:(从命名空间获取值)
$email = $session_user->offsetGet('email');
Run Code Online (Sandbox Code Playgroud)
//在会话中设置值:(从命名空间设置值)
$session_user->offsetSet('username', 'abcd');
Run Code Online (Sandbox Code Playgroud)
现在我的问题是清除在我的应用程序的几个级别设置的整个容器.
如果我尝试下面的代码它清除我的所有会话容器.
$session_user = new Container('user');
$session_user->getManager()->getStorage()->clear();
Run Code Online (Sandbox Code Playgroud)
我想只清除一个名为'user'的容器,它有很多键(我不知道最后会有什么).有没有办法实现这一目标
我知道我可以在每个键上做offsetunset但这不是我觉得的最佳解决方案.
如果有任何替代方法可以清除特定的会话容器,请建议.
注意: -我没有使用任何第三方模块,如ZfcUser和Akrabat会话
在此先感谢您回复此帖子.
我有一些自定义应用程序特定设置,我想放入配置文件.我会把这些放在哪里?我考虑过/config/autoload/global.php和/或local.php.但是我不确定在配置数组中应该使用哪些密钥以确保不覆盖任何系统设置.
我在考虑这样的事情(例如在global.php中):
return array(
'settings' => array(
'settingA' => 'foo',
'settingB' => 'bar',
),
);
Run Code Online (Sandbox Code Playgroud)
这是一种令人愉快的方式吗?如果是这样,我如何从控制器内访问设置?
提示非常感谢.
我正在尝试使用Zend Framework 2进行这样的查询:
SELECT count(*) as num FROM mytable
Run Code Online (Sandbox Code Playgroud)
这是我用来构建select语句的代码(记住我已经导入了必要的类):
$select = new Select();
$select->from('mytable')
->columns(array('num'=>'count(*)'), false);
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,因为生成的查询如下:
SELECT [count(*)] AS [num] FROM [mytable]
Run Code Online (Sandbox Code Playgroud)
...抛出以下错误:
Invalid column name 'count(*)'
Run Code Online (Sandbox Code Playgroud)
这是由count(*)周围的方括号引起的.我怎样才能使它正常工作,基本上在SQL中使用count(*)而不是[count(*)].另外,我知道你可以只使用常规查询来完成它,但是我需要这个来处理Select对象.据我所知,这曾经与之前版本的Zend一起使用,我已经看到了很多解决方案,但Zend Framework 2没有.
我在zend框架2中工作,我正在为所有路由使用段类型,但我注意到在zend骨架应用程序中使用了文字路由类型.这些是什么?
假设我们有一个名为Cart的模块,并且如果满足某些条件,则希望重定向用户.我想在应用程序到达任何控制器之前在模块引导阶段放置重定向.
所以这是模块代码:
<?php
namespace Cart;
class Module
{
function onBootstrap() {
if (somethingIsTrue()) {
// redirect
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我想使用Url控制器插件,但似乎控制器实例在此阶段不可用,至少我不知道如何获取它.
提前致谢
我目前正在从数据库构建菜单,代码效果很好.但是我现在想要使用twitter bootstrap设置菜单样式,这就是我遇到问题的地方.有没有人知道如何将zend框架2导航菜单与twitter bootstrap集成?如果有人感兴趣,生成的菜单如下所示.
<ul class="nav">
<li>
<a href="/view-page/home">Home</a>
<ul>
<li>
<a href="/view-page/coupons">Coupons</a>
<ul>
<li>
<a href="/view-page/printable-coupons">Printable Coupons</a>
<ul>
<li>
<a href="/view-page/cut-these-coupons">Cut these here coupons</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="active">
<a href="/view-page/about-us">About Us</a>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud) 我只是尝试通过扩展Zend AbstractTableGateway并使用继承select()函数来获取给定表中的所有记录.这个select()函数返回Zend类型ResultSet但是我无法使用得到一个结果数组toArray().
我收到以下消息:
作为此DataSource的一部分的行,类型对象不能转换为数组
我把它解决了
假设您已经扩展了AbstractTableGateway
$resultSet = $this->select();
foreach($resultSet as $row) { echo $row->yourProperty }
Run Code Online (Sandbox Code Playgroud) 每次我在Zend Framework 2中收到错误时,我只显示500内部服务器错误,并且必须搜索Zend Server错误日志.我已经尝试将它放到我的config/autoload/local.php文件中,但它不起作用:
return array(
'phpSettings' => array(
'display_startup_errors' => true,
'display_errors' => true,
),
);
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的实体类上使用Service Manager,但我不知道最好的方法.
在控制器上很容易,因为我们可以使用以下命令调用服务管理器:$ this-> getServiceLocator();
但是,在我的实体类中,即使我实现了ServiceLocatorAwareInterface,我也可以通过服务管理器来调用ServiceManager,因为我的实体类没有被调用:
那么最好的方法是什么:
1 - 从我的控制器2传递我的实体类中的serviceManager - 使用ServiceManager构建我的实体类3 - ...?
为了最好地理解我的问题,这是我的代码不起作用:
我的实体类:
class Demande extends ArraySerializable implements InputFilterAwareInterface {
/../
public function getUserTable() {
if (! $this->userTable) {
$sm = $this->getServiceLocator();//<== doesn't work !
$this->userTable = $sm->get ( 'Application\Model\UserTable' );
}
return $this->userTable;
}
Run Code Online (Sandbox Code Playgroud)