私は本当に混乱しています!
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
それを行う正しい方法と、それがどのように機能するべきかを教えてもらえますか?
ありがとうございました!