gpt4 book ai didi

zend-framework - 带学说 2 的 zend framework 2 模型

转载 作者:行者123 更新时间:2023-12-02 00:24:20 25 4
gpt4 key购买 nike

我正在尝试理解 Zend Framework 2。为此,我从 Ron Allen 的教程开始 http://akrabat.com/getting-started-with-zend-framework-2/然后,我使用教程 http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/ 整合学说 2好的,在此之前我决定让它变得更复杂。

我将数据库更改为以下内容:

--
-- Estrutura da tabela `album`
--
CREATE TABLE IF NOT EXISTS `album` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`artist_id` int(11) NOT NULL,
`title` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
KEY `artist` (`artist_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

--
-- Estrutura da tabela `artist`
--
CREATE TABLE IF NOT EXISTS `artist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

我的应用程序有这样的结构:

module
Album
src
Album
Controller
AlbumController.php
Entity
Album.php
Artist
src
Artist
Controller
ArtistController.php
Entity
Artist.php

我的新实体是这样的:

class Album {

/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string")
*/
protected $title;

/**
* @ORM\ManyToOne(targetEntity="Artist", inversedBy="album")
* @ORM\JoinColumn(name="artist_id", referencedColumnName="id")
*/
protected $artist;

...
}
class Artist {

/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string")
*/
protected $name;

/**
* @ORM\OneToMany(targetEntity="Album", mappedBy="artist")
*/
protected $album;


public function __construct()
{
$this->album = new ArrayCollection();
}

...
}

但它不起作用!我收到了这条消息:

"The target-entity Album\Entity\Artist cannot be found in 'Album\Entity\Album#artist'."

所以我的问题是:哪里出了问题?我的实体在错误的地方?还是我的模块组织不好?如何使一个实体对多个模块可见?

更新:

我将我的实体更改为:

class Album {

/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string")
*/
protected $title;

/**
* @ORM\ManyToOne(targetEntity="\Artist\Entity\Artist", inversedBy="album")
* @ORM\JoinColumn(name="artist_id", referencedColumnName="id")
*/
protected $artist;

...
}
class Artist {

/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @ORM\Column(type="string")
*/
protected $name;

/**
* @ORM\OneToMany(targetEntity="\Album\Entity\Album", mappedBy="artist")
*/
protected $album;

...
}

但是我得到了同样的错误:

"The target-entity Artist\Entity\Artist cannot be found in 'Album\Entity\Album#artist'."

更新 2:

我将应用程序的结构更改为:

module
Album
src
Album
Controller
AlbumController.php
ArtistController.php
Entity
Album.php
Artist.php

所以我的实体在同一个命名空间中,现在我的程序可以正常工作了! =)

但我仍然有一个问题:如何让一个实体对 ZF2 中的多个模块可见?

最佳答案

我找到答案了! =D

我得等 8 个小时才能回答我自己的问题,所以我们开始吧。

正如我所说,我复制教程 http://www.jasongrimes.org/2012/01/using-doctrine-2-in-zend-framework-2/

他们教授如何配置模块以使用 Doctrine 2。在文件 module/Album/config/module.config.php 中,他们插入以下代码:

return array(
'di' => array(
'instance' => array(
// ...
'orm_driver_chain' => array(
'parameters' => array(
'drivers' => array(
'Album' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'namespace' => __NAMESPACE__ . '\Entity',
'paths' => array(
__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
),
),
),
),
),

根据教程:

"This tells Doctrine that the Album module’s entities use the namespace Album\Entity, and that the classes in that namespace are stored in $PROJECT_DIR/module/Album/src/Album/Entity."

所以,问题来了!Doctrine 被配置为仅使用 Album\Entity!所以我将代码更改为以下内容(编程错误...抱歉):

//...
'drivers' => array(
'Album' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'namespace' => __NAMESPACE__ . '\Entity',
'paths' => array(
__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity'
),
),
'Artist' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'namespace' => '\Artist\Entity',
'paths' => array(
__DIR__ . '/../../Artist/src/Artist/Entity'
),
),
//...

如您所见,我配置了“艺术家”驱动程序...

现在我的应用程序可以正常工作了! =)

我仍在寻找在我的应用程序中配置原则的正确方法,但至少我找到了答案!

谢谢大家! :)

关于zend-framework - 带学说 2 的 zend framework 2 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com