0

これはこれに間違っていますか?私はzendフレームワークで新しくなった........................................... .................................................. ..............................ZF - Doctrine2がリポジトリを取得できません

enter image description here

これは私のフォルダ構造体である

enter image description here

enter image description here

UserControllerFactory.php

<?php 

namespace Admin\Controller\Factory; 

use Admin\Controller\UserController; 
use User\Entity\User; 
use Admin\Form\UserForm; 
use User\Model\UserTable; 
use Doctrine\ORM\EntityManager; 
use Doctrine\ORM\Mapping\Entity; 
use Interop\Container\ContainerInterface; 

class UserControllerFactory 
{ 

    public function __invoke(ContainerInterface $container) 
    { 

     /** @var EntityManager $entityManager */ 
     $entityManager = $container->get(EntityManager::class); 
     $repository = $entityManager->getRepository(User::class); 
     $userForm = $container->get(UserForm::class); 
     return new UserController($entityManager, $repository, $userForm); 
    } 


} 

UserController.php

<?php 

namespace Admin\Controller; 

//use User\Entity\User; 
use Admin\Form\UserForm; 
use Doctrine\ORM\EntityManager; 
use Doctrine\ORM\EntityRepository; 
use Zend\Hydrator\ClassMethods; 
use Zend\Mvc\Controller\AbstractActionController; 
use Zend\Http\Request; 
use Zend\View\Model\ViewModel; 


class UserController extends AbstractActionController 
{ 
    /** 
    * @var EntityRepository 
    */ 
    private $repository; 
    /** 
    * @var EntityManager 
    */ 
    private $entityManager; 
    private $form; 

    public function __constructor(EntityManager $entityManager, EntityRepository $repository, UserForm $form){ 
     $this->form = $form; 
     $this->repository = $repository; 
     $this->entityManager = $entityManager; 
    } 

    public function indexAction() 
    {  
     return new ViewModel([ 
      'users' => $this->repository->fetchAll() 
     ]); 
    } 

     public function addAction() 
    { 
     $form = $this->form; 
     $form->get('submit')->setValue('Adicionar'); 

     $request = $this->getRequest(); 

     if (!$request->isPost()) { 
      return ['form' => $form]; 
     } 

     $form->setData($request->getPost()); 

     if (!$form->isValid()) { 
      return ['form' => $form]; 
     } 

     $post = $form->getData(); 
     $this->entityManager->persist($post); 
     $this->entityManager->flush(); 

     return $this->redirect()->toRoute('admin/user'); 

    } 

    public function editAction() 
    { 
     $id = (int)$this->params()->fromRoute('id', 0); 

     if (!$id || !($post = $this->repository->find($id))) { 
      return $this->redirect()->toRoute('admin/user'); 
     } 

     $form = $this->form; 
     $form->bind($post); 
     $form->get('submit')->setAttribute('value', 'Edit Post'); 

     $request = $this->getRequest(); 

     if (!$request->isPost()) { 
      return [ 
       'id' => $id, 
       'form' => $form 
      ]; 
     } 

     $form->setData($request->getPost()); 
     if (!$form->isValid()) { 
      return [ 
       'id' => $id, 
       'form' => $form 
      ]; 
     } 

     $this->entityManager->flush(); 
     return $this->redirect()->toRoute('admin/user'); 
    } 

    public function deleteAction() 
    { 
     $id = (int)$this->params()->fromRoute('id', 0); 

     if (!$id || !($post = $this->repository->find($id))) { 
      return $this->redirect()->toRoute('admin/user'); 
     } 

     $this->entityManager->remove($post); 
     $this->entityManager->flush(); 
     return $this->redirect()->toRoute('admin/user'); 

    } 
} 

UserTable.php

<?php 
/** 
* Created by PhpStorm. 
* User: jho 
* Date: 24/06/2017 
* Time: 18:55 
*/ 

namespace User\Model\Factory; 


use Zend\Db\Exception\RuntimeException; 
use Zend\Db\TableGateway\TableGatewayInterface; 
class UserTable 
{ 
    private $tableGateway; 

    public function find($id) 
    { 
     $id = (int)$id; 
     $rowset = $this->tableGateway->select(['id' => $id]); 
     $row = $rowset->current(); 

     if (!row) { 
      throw new RuntimeException(sprintf(
       'Could not retrieve the row %d', $id 
      )); 
     } 

     return $row; 
    } 

    public function fetchAll(){ 
     return $this->tableGateway->select(); 
    } 

    public function save(User $user){ 
     $data = [ 
      'username'=>$user->username, 
      'fullname'=>$user->fullname, 
      'password'=>$user->password, 
     ]; 

     $id = (int) $user->id; 

     if((int)$user->id === 0){ 
      $this->tableGateway->insert($data); 
      return; 
     } 

     if(!$this->find($id)){ 
      throw new RuntimeException(sprintf(
       'Could not retrieve the row %d', $id 
      )); 
     } 
     $this->tableGateway->update($data, ['id'=>$id]); 

    } 
} 

User.php

<?php 


namespace User\Model; 


class User 
{ 
    public $id; 
    public $fullname; 

    public function exchangeArray(array $data){ 
     $this->id = (!empty($data['id'])) ? $data['id']: null; 
     $this->title = (!empty($data['fullname'])) ? $data['fullname']: null; 
    } 

    public function getArrayCopy(){ 
     return[ 
      'id'=>$this->id, 
      'fullname'=>$this->fullname, 
     ]; 
    } 
} 
+0

「User \ Entity \ User」のソースコードもここに入れてください –

答えて

1

あなたは、データベースからデータを取得する2つの異なるアプローチを混合しています。

TableGatewayのようにZendアプローチを使うことも、Doctrine(EntityManager/Repositories)を使うこともできます。

コントローラ内で使いたいメソッドの1つを選択する必要があります。

namespace User\Model; 

use Doctrine\ORM\Mapping AS ORM; 

/** 
* @ORM\Entity() 
*/ 
class User 
{ 
    /** 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    * @ORM\Column(type="integer") 
    */ 
    public $id; 

    /** @ORM\Column(type="string") */ 
    public $fullname; 

    public function exchangeArray(array $data){ 
     $this->id = (!empty($data['id'])) ? $data['id']: null; 
     $this->title = (!empty($data['fullname'])) ? $data['fullname']: null; 
    } 

    public function getArrayCopy(){ 
     return[ 
      'id'=>$this->id, 
      'fullname'=>$this->fullname, 
     ]; 
    } 
} 

更新:あなたのUserモデルを更新するだから、かなりhttp://ocramius.github.io/presentations/doctrine-orm-and-zend-framework-2/#/59

ている:あなたは教義に固執する場合

だから、あなたはOcramiusの次のスライドを見て取ることができますあなたのユーザモジュールのファイルmodule.config.phpの後に、あなたの設定に以下を追加してください:

array(
'doctrine' => array(
    'driver' => array(
    'application_entities' => array(
     'class' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
     'cache' => 'array', 
     'paths' => array(__DIR__ . '/../src/User/Model') 
    ), 
    'orm_default' => array(
     'drivers' => array(
     'User\model' => 'application_entities' 
    ) 
    ), 
) 
), 

注意してください彼はDoctrine-ORM-moduleが必要です。参照:https://github.com/doctrine/DoctrineORMModule

関連する問題