2016-06-08 2 views
0

Ich bin ein Anfänger von Zend Framework2. Nach dem Beispiel von "Zend Framework 2.0 by Example Beginner's Guide" blieb ich in einem seltsamen Problem stecken.Sequenz zum Deklarieren einer Modellvariablen in Zend Framework 2

Hier ist meine Projektstruktur.

project structure

Ich habe eine einfache Funktion 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; 
    } 
} 

Wenn Sie den obigen Code ich einen Fehler laufen:

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

Aber wenn ich $user = new User(); unten bewegen. Wie dieser:

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; 
} 

Es wird perfekt funktionieren. Kann mir bitte jemand sagen, wie das passiert? Ist es ein Sequenzproblem? Vielen Dank!

Antwort

0

Es ist ein einfacher Tippfehler in Ihrem Controller:

use users\Model\User; 

sollte sein:

use Users\Model\User; 

(beachten Sie die Hauptstadt 'U' in 'Benutzer').

+0

Vielen Dank Ruben. Es klappt. Aber jetzt bin ich verwirrt, warum es funktioniert, nachdem ich $ user = new User() gesetzt habe; weiter unten, nachdem ich $ tableGateway deklariert habe, obwohl ich 'users \ Model \ User;' (im unteren 'u') diesen Fehler behalte. – Zhigang

+0

@Zhigang Nicht ganz sicher, aber meine Vermutung ist, dass es etwas mit dieser Zeile zu tun hat: $ resultSetPrototype-> setArrayObjectPrototype (new \ Users \ Model \ User); wird zuerst ausgeführt. – Ruben