小编gre*_*eek的帖子

PHP使用短划线箭头" - >"检索数组值

我已经使用PHP了很长一段时间,但从未成为高级程序员.我觉得这是一个愚蠢的问题,但从来没有理解为什么可以使用不同的方法检索一些数组值:

这个:

$array->value
Run Code Online (Sandbox Code Playgroud)

而不是正常的:

$array['value']
Run Code Online (Sandbox Code Playgroud)

标准的$ array ['value']总是有效,但是使用 - >方法的那个有时没有.这是为什么?

这是一个例子.我正在使用Zend Framework 2,我可以使用 - >方法获取会话值:

$this->session->some_value
Run Code Online (Sandbox Code Playgroud)

但是,如果我做一个新的,正常的数组,我不能:

$array = array('some_value' => 'myvalue');
$array['some_value']; // works!!
$array->some_value;  // does not work :(
Run Code Online (Sandbox Code Playgroud)

在Zend Framework 1中,大多数数组都可以这样工作,而且在ZF2中越来越多,我遇到的问题是我需要改变我获得该值的方式.这有意义吗?我当然感谢任何帮助.谢谢,格雷格

php arrays zend-framework2

20
推荐指数
1
解决办法
2万
查看次数

Zend Framework 2 Db\Adapter\Adapter查询结果集,如ZF1

只需要了解ZF2中的一些简单数据库查询.在ZF1中我有这样简单的方法:

public function recordset()
{
// listing of all records 
$db = Zend_Registry::get('db');
$sql = "SELECT " . $this->_selectlist() .
    " from customer c";
$r = $db->fetchAll($sql);
return $r;
}
Run Code Online (Sandbox Code Playgroud)

在ZF2中,我该怎么做?我已经尝试了以下内容,但这只是返回看起来像"Result"对象的东西,但我想要的是像ZF1那样使用fetchAll执行的数组.如果我必须迭代结果对象只是为了稍后提供数组,然后必须重复迭代,它似乎只是一些重复工作.

无论如何,这是我到目前为止在ZF2中所拥有的:

//above the controller start I have: use Zend\Db\Adapter\Adapter as DbAdapter;

public function blaAction()
{
    $db = new DbAdapter(
        array(
            'driver'        => 'Pdo',
            'dsn'            => 'mysql:dbname=mydb;host=localhost',
            'username'       => 'root',
            'password'       => '',
            )
    );
    $sql = 'select * from customer';
    $stmt = $db->query($sql);
    $results = $stmt->execute();
    $this->view->data = $results; …
Run Code Online (Sandbox Code Playgroud)

php database frameworks zend-framework2

9
推荐指数
2
解决办法
3万
查看次数

Zend Framework 2模块在控制器onBootstrap之间共享变量

是否可以在Module.php中创建变量甚至共享对象(如DB适配器),以便在所有视图控制器中使用?(Zend Framework 2)

例如:

class Module 
{
    public function onBootstrap(MvcEvent $e)
    {

        $moduleConfig = $e->getServiceManager()->get('Config')
    }
}
Run Code Online (Sandbox Code Playgroud)

在控制器中,以某种方式访问​​使用:

$this->moduleConfig['db']
Run Code Online (Sandbox Code Playgroud)

在上面我知道这只是数据库适配器的配置数组,但它怎么会工作?

我看到一个人可以在控制器动作中执行此操作:

$config = $this->getServiceLocator()->get('Config')
$dba = new DbAdapter($config['db']);
Run Code Online (Sandbox Code Playgroud)

我不想在每个需要配置的地方都这样做.我怎么能这样做:$ this-> config ?? 所以它适用于所有行动.更好的是,如何在整个模块中做到这一点?我知道我这一切都错了,但在ZF1中我们有Zend_Registry :: get()这样的简单事情.我正在阅读文档和各种各样的文章,但总是有一些假设,我只是迷路了.所以我真正想要的是:A)全球可访问的配置项,B)全局可访问的数据库适配器

我只想在我的控制器中调用$ this-> db或$ this-> config-> item.这可能吗?我知道我错过了一些非常简单的事情.

我也尝试使用$ this-> getServiceLocator() - > get('Config')在我的__construct中设置$ this-> config; 但我知道服务定位器在构造期间尚不可用.我尝试通过在模块的onBootstrap中设置preDispatch来做类似的事情,但我似乎无法将这些项目放入我的控制器中.

仅供参考,我在我的global.php中确实有这个(不,它不会留在那里,只是例子):

'db' => array(
        'driver' => 'Pdo',
        'dsn'   => 'mysql:dbname=mydb;host=localhost;',
        'username' => 'root',
        'password' => '',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),

    ),
Run Code Online (Sandbox Code Playgroud)

我可以使用getServiceLocator()在任何操作中访问该项和其他项.我希望这些项目可用作我的控制器属性,如$ this-> config-> item. …

php zend-framework2

5
推荐指数
1
解决办法
1万
查看次数

Zend\Form:在Zend/Form/Fieldset.php中的非对象上调用成员函数insert()

我正在学习如何使用Zend Framework 2(2.1.4)表单并遇到此错误.

Call to a member function insert() on a non-object in ... /Zend/Form/Fieldset.php on line 178
Run Code Online (Sandbox Code Playgroud)

我不想使用表单自动连接到数据库,事实上我只想使用表单来帮助验证,并将从一个值数组中拉出并填充它.如何关闭表单对象中的数据库连接?

我习惯于处理ZF1表单,所以这个新的表单系统令人困惑.一旦我想到它,我们在视图脚本中使用表单元素进行格式化的方式就会很好.那些旧的装饰者很痛苦.无论如何,对我来说,使用表单而不处理绑定的数据库对象会很好.这可能吗?除了简单的表单之外,使用InputFilterAwareInterface类需要一个模型类似乎太复杂了.虽然一步一步,我甚至无法显示表格.

我感谢任何帮助.

以下是我的控制器,表单和视图脚本:

表格类:

namespace FBWeb\Form;
use Zend\Form\Form;
use Zend\Form\Element;
class ClientForm extends Form
{
    public function __construct()
    {
        $this->setAttribute('method', 'post');

        $this->add(array(
            'name' => 'client',
            'type' => 'Zend\Form\Element\Text',
            'options' => array(
                'label' => 'Client Name',
            ),
            'attributes' => array(
                'type' => 'text',
            ),

        ));

        $this->add(array(
            'name' => 'submit',
            'attributes' => array(
                'type'  => 'submit',
                'value' => 'Add'
            ),
        ));
    }
} …
Run Code Online (Sandbox Code Playgroud)

forms zend-framework2

4
推荐指数
1
解决办法
5234
查看次数

Zend Framework 2如何在多个MVC模块中禁用事件侦听器

我有两个我正在尝试构建的MVC模块,一个(FBWsrv)具有JSON输出和不同的安全过程,以及用于正常Web使用的主MVC模块(FBWeb).我有所有设置的路线,大多数工作.我遇到的问题是他们都有onBootstrap方法附加他们自己的事件监听器,我想如果不在正确的MVC模块中则禁用监听器.

我的路线看起来像这样:

模块FBWeb,url中的"app"模块:

/app/controller/action/par1/val1
Run Code Online (Sandbox Code Playgroud)

模块FBWsrv,在url中是"wsrv":

/wsrv/controller/action/par1/val1
Run Code Online (Sandbox Code Playgroud)

正如我所提到的,路线工作正常.我得到了正确的控制器和动作.但问题是当我甚至没有从/ wsrv路由运行/ app时,MVC事件监听器正在两个模块上运行.如果我在/ wsrv中,我想要做的是禁用/ app中的事件.

模块的简短版本设置如下:

FBWeb/Module.php:

class Module 
{

    public function onBootstrap(MvcEvent $e)
    {

        $this->sm = $application->getServiceManager();
        $this->config = $e->getApplication()->getConfig();

        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);

        $eventManager->attach( \Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'addInstanceObjects'), 5000 );
        $eventManager->attach( \Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'securityDispatch'), 0 );
        $eventManager->attach( \Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'preDispatch'), 100 );
        $eventManager->attach( \Zend\Mvc\MvcEvent::EVENT_DISPATCH, array($this, 'postDispatch'), -100 );
        $eventManager->attach( \Zend\Mvc\MvcEvent::EVENT_DISPATCH_ERROR, array($this, 'onDispatchError'), -5000);

    }
Run Code Online (Sandbox Code Playgroud)

FBWsrv/Module.php:

class Module 
{
    public function onBootstrap(MvcEvent $e)
    {

        $this->sm = $application->getServiceManager();
        $this->config = $e->getApplication()->getConfig(); …
Run Code Online (Sandbox Code Playgroud)

model-view-controller module zend-framework2

2
推荐指数
1
解决办法
2121
查看次数