dongque5529 2016-06-08 21:57
浏览 38
已采纳

在Zend Framework 2中声明模型变量的顺序

I am a beginner of Zend Framework2. Following the example of "Zend Framework 2.0 by Example Beginner's Guide" I got stuck in a weird problem.

Here is my project structure.

project structure

I have a simple function creatureUser() in RegisterController.php:

<?php
namespace Users\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Users\Form\RegisterForm;
use Users\Form\RegisterFilter;
use users\Model\User;
use Users\Model\UserTable;

class RegisterController extends AbstractActionController
{

    public function indexAction()
    {
        //$form = new RegisterForm();
        $form = $this->getServiceLocator()->get('RegisterForm');
        $viewModel  = new ViewModel(array('form' => $form)); 
        return $viewModel; 
    }

    public function confirmAction()
    {
        $viewModel  = new ViewModel(); 
        return $viewModel; 
    }

    public function processAction()
    {
        if (!$this->request->isPost()) {
            return $this->redirect()->toRoute(NULL , array( 
                    'controller' => 'register', 
                    'action' =>  'index' 
                ));
        }

        $post = $this->request->getPost();

        //$form = new RegisterForm();
        //$inputFilter = new RegisterFilter();
        //$form->setInputFilter($inputFilter);
        $form = $this->getServiceLocator()->get('RegisterForm');

        $form->setData($post);
        if (!$form->isValid()) {
            $model = new ViewModel(array(
                'error' => true,
                'form'  => $form,
            ));
            $model->setTemplate('users/register/index');
            return $model;
        }

        // Create user
        $this->createUser($form->getData());

        return $this->redirect()->toRoute(NULL , array( 
            'controller' => 'register', 
            'action' =>  'confirm' 
        ));
    }

    protected function createUser(array $data)
    {
        $user = new User();
        $sm = $this->getServiceLocator();
        $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
        $resultSetPrototype = new \Zend\Db\ResultSet\ResultSet();
        $resultSetPrototype->setArrayObjectPrototype(new \Users\Model\User);
        $tableGateway = new \Zend\Db\TableGateway\TableGateway('user', $dbAdapter, null, $resultSetPrototype);

        //$user = new User();
        $user->exchangeArray($data);
        $userTable = new UserTable($tableGateway);

        $userTable->saveUser($user);
        return true;
    }
}

When run the above code I get an error:

Fatal error: Class 'users\Model\User' not found in C:\WebApp\ZF2Skeleton\module\Users\src\Users\Controller\RegisterController.php on line 90.

But If I move $user = new User(); below. Like this one:

protected function createUser(array $data)
{
    $sm = $this->getServiceLocator();
    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
    $resultSetPrototype = new \Zend\Db\ResultSet\ResultSet();
    $resultSetPrototype->setArrayObjectPrototype(new \Users\Model\User);
    $tableGateway = new \Zend\Db\TableGateway\TableGateway('user', $dbAdapter, null, $resultSetPrototype);

    $user = new User();
    $user->exchangeArray($data);
    $userTable = new UserTable($tableGateway);

    $userTable->saveUser($user);
    return true;
}

It will work perfectly. Can anyone tell me how this happens, please? Is it a sequence problem? Thank you!

  • 写回答

1条回答 默认 最新

  • duanjia3187 2016-06-09 00:32
    关注

    It's a simple typo in your controller:

    use users\Model\User;
    

    should be:

    use Users\Model\User;
    

    (note the capital 'U' in 'Users').

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题