0

私は本当に混乱しています!

ZF2初心者です。今それを発見し始めています。

ZendマニュアルのStarting Skeleton applicationに従いました。問題は、Album モジュールを作成するために、現実世界では不可能な 1 つのテーブルしか使用しないことです。開発時には、少なくともいくつかのテーブルがあります。

今、Michael Romer の Web Development with ZF2 を読んでいます。問題は、彼が自分のコードをどこに置いたのか、私には本当に理解できないということです。本によると、彼は自分のコードをmodule.config.phpの中に入れています

<?php

$dbParams = array(
    'database'  => 'gott',
    'username'  => 'root',
    'password'  => '',
    'hostname'  => 'localhost',
);

return array(
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => function ($sm) use ($dbParams) {
                return new Zend\Db\Adapter\Adapter(array(
                    'driver'    => 'pdo',
                    'dsn'       => 'mysql:dbname='.$dbParams['database'].';host='.$dbParams['hostname'],
                    'database'  => $dbParams['database'],
                    'username'  => $dbParams['username'],
                    'password'  => $dbParams['password'],
                    'hostname'  => $dbParams['hostname'],
                ));
            },
        ),
    ),
);

GitHubでコードを見ると、config/autoload内のglobal.phpにあるはずだと書かれています。

私が理解しているように、アイデアは-global.php内にparamsといくつかのセットアップがあり、次にmodule.config.phpでglobal.phpによって開始されたサービスを検出し(以下のコードを使用)、コントローラーに割り当てます:

'service_manager' => array(
        'factories' => array(
            'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
            'Portfolio\Mapper\Category' => function($sm){
                return new \Portfolio\Mapper\Category($sm->get('Zend\Db\Adapter\Adapter'));
            }
        ),
    ),

私が理解している限り、私のコントローラーは私の DB 接続を検出できるはずです。\

これは私のコントローラーコードです

    public function addCategoryAction(){

        $form = new \Portfolio\Form\CategoryAdd();

        if($this->getRequest()->isPost()){
            $form->setHydrator(new \Zend\Stdlib\Hydrator\Reflection());
            $form->bind(new \Portfolio\Entity\Category());
            $form->setData($this->getRequest()->getPost());

            if($form->isValid()) {
                $newEntity = $form->getData();

                $mapper = $this->getServiceLocator()->get('Portfolio\Mapper\Category');
                $mapper->insert($newEntity);

                $form = new \Portfolio\Form\CategoryAdd();

                return new ViewModel(array(
                    'form' => $form,
                    'success' =>true
                ));
            } else {
                return new ViewModel(array(
                        'form' => $form
                ));
            }
        } else {
            return new ViewModel(array(
                    'form' => $form
            ));
        }

//         $viewObject = new ViewModel(array(
//             'form' => $form
//         ));

//         return $viewObject; 

    }

そして、これがTableGatewayを使用したマッパーです

<?php
namespace Portfolio\Mapper;

use Portfolio\Entity\Category as CategoryEntity;
use Zend\Db\TableGateway\TableGateway;
use Zend\Db\TableGateway\Feature\RowGatewayFeature;

class Category extends TableGateway {

    protected $tableName = 'portfolio_categories';
    protected $idCol = 'categoryId';
    protected $entityPrototype = null;
    protected $hydrator = null;

    public function __construct($adapter){

        parent::__construct($this->tableName, $adapter, new RowGatewayFeature($this->idCol));

        $this->entityPrototype = new CategoryEntity();
        $this->hydrator = new \Zend\Stdlib\Hydrator\Reflection;

    }    

    public function insert($entity){
        return parent::insert($this->hydrator->extract($entity));
    }

}

動いていない。

An error occurred
An error occurred during execution; please try again later.
Additional information:
Zend\Db\Adapter\Exception\InvalidQueryException
File:
F:\Server\htdocs\gott\vendor\ZF2\library\Zend\Db\Adapter\Driver\Pdo\Statement.php:245
Message:
Statement could not be executed

それを行う正しい方法と、それがどのように機能するべきかを教えてもらえますか?

ありがとうございました!

4

0 に答える 0