Php Zend Framework 2,使模型查询成为web服务
我是Zend framework的新手(虽然我已经使用过Symfony2,听说它们很相似),我已经开始了一个项目,在这个项目中我必须升级一个使用Zend 1.11创建的站点(该站点已经功能齐全) 我升级的目的是让数据(最初存储在数据库中,现在将存储在nosql中,以及一个数据库,将来可能存储在其他地方)更易于构建,与Zend模型的耦合性也更低。(模型与MVC中的M相同) 为了实现这一点,我被要求使用一个与数据交互的web服务,以及Zend的模型。 这样,当数据结构被修改时,Zend网站不会受到直接影响(而且仍然可以工作!),我们只需重新安排web服务 有没有什么优雅的方法可以让Zend的模型与web服务而不是数据库交互 我希望我的问题是可以理解的 祝你今天愉快 M.G.您可以使用。作为参考,您可以看到模块是如何运行的 您可以为每个实体创建mapper接口,并根据数据存储创建实现。 比如说, 产品实体Php Zend Framework 2,使模型查询成为web服务,php,web-services,rest,model-view-controller,zend-framework2,Php,Web Services,Rest,Model View Controller,Zend Framework2,我是Zend framework的新手(虽然我已经使用过Symfony2,听说它们很相似),我已经开始了一个项目,在这个项目中我必须升级一个使用Zend 1.11创建的站点(该站点已经功能齐全) 我升级的目的是让数据(最初存储在数据库中,现在将存储在nosql中,以及一个数据库,将来可能存储在其他地方)更易于构建,与Zend模型的耦合性也更低。(模型与MVC中的M相同) 为了实现这一点,我被要求使用一个与数据交互的web服务,以及Zend的模型。 这样,当数据结构被修改时,Zend网站不会受到
class Product
{
/**
* @var int
*/
protected $id;
/**
* @var string
*/
protected $name;
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set id.
*
* @param int $id
* @return UserInterface
*/
public function setId($id)
{
$this->id = (int) $id;
return $this;
}
/**
* Get name.
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set name.
*
* @param string $name
* @return UserInterface
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
}
产品映射器
class Product
{
/**
* @var int
*/
protected $id;
/**
* @var string
*/
protected $name;
/**
* Get id.
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set id.
*
* @param int $id
* @return UserInterface
*/
public function setId($id)
{
$this->id = (int) $id;
return $this;
}
/**
* Get name.
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set name.
*
* @param string $name
* @return UserInterface
*/
public function setName($name)
{
$this->name = $name;
return $this;
}
}
<?php
<?php
namespace Product\Mapper;
interface ProductMapperInterface
{
/**
* @var int $id
* @returns \Product\Entity\Product
*/
public function findById($id);
/**
* @var array $criteria
* @returns \Product\Entity\Product[]
*/
public function find(array $criteria, .....);
/**
* @var \Product\Entity\Product $product
*/
public function insert($product);
/**
* @var \Product\Entity\Product $product
*/
public function update($product);
}
对不起,我忘了说这个网站是用Zend 1.11版制作的。我尝试的是将所有扩展Zend_Db_Table_Abstract的模型类更改为“经典”类(如您的第一个代码示例)。然后我计划使用另一个类“sendRestRequest”,它将管理与web服务的通信(从而创建每个“经典”模型类的实体)。你认为这是一个好主意,还是有更好的方法来实现我的目标,这就是通过Web服务而不是数据库使这个Zend网站工作……如果你想使用这个模式,它不会映射你正在使用哪个版本的Zend。您需要确保所有其他类仅依赖MapperInterface来获取和操作数据。创建一个实现MapperInterface(示例WebServiceStorageApper)的类,并在其中包含管理与web服务通信的逻辑。为了减少冗余,您可以创建一个类,如WebServiceStorage
(或sendRestRequest
),所有使用web服务的映射程序都将依赖于WebServiceStorage。非常感谢您的回答,我将尝试一下(目前我不确定我是否理解了所有内容)如果我有更多问题,请回到这里:psorry。我的最后一条评论中有一个拼写错误。“如果要使用此模式,则使用哪个版本的zend并不重要。”