zend Framework 2 - 在数据库中保存数据时出现服务管理器错误


zend framework 2 - ServiceManager error while saving data in database

我正在尝试使用教义在zend2框架中创建一个saveAction。

在我的促销控制器中,我有此操作:

public function saveLinkAction() {
    $view = new ViewModel();
    $salonId = (int) $this->params()->fromPost('salon_id', null);

    $addLink = $this->getServiceLocator()->get('Promotions'Model'Link');
        $linkData['salon_id'] = $salonId;
        $linkData['link'] = '/link/example';
        $addLink->setData($linkData);        

    return $view;
}

这只是为了学习如何在数据库中写入数据。

$addLink = $this->getServiceLocator()->get('Promotions'Model'Link');

这行代码显示错误,我不知道是什么原因?

Zend'ServiceManager'ServiceManager::get was unable to fetch or create an instance for Promotions'Model'Link

我在模型目录中创建了一个链接.php。

<?php
namespace Link'Model;
use Application'Model'Entity;
use Zend'Form'Annotation;
/**
 * @Entity
 * @Table(name="promo_link")
 */
class Link extends Entity {
    /********** PROPERTIES **********/
    /**
     * @Id @GeneratedValue(strategy="AUTO") @Column(name="id", type="integer")
     * @var int
     * 
     * @Annotation'Exclude()
     */
    protected $id;
    /**
     * @Column(name="salon", type="integer")
     * @var int 
     * 
     * @Annotation'Options({"label":"Salon"})
     * @Annotation'Validator({"name": "Digits"})
     */
    protected $salon;
    /**
     * @Column(name="link", type="string")
     * @var string 
     */
    protected $link;
     /**
     * @Column(name="start_date", type="string")
     * @var string 
     */
    protected $start_date;
     /**
     * @Column(name="end_date", type="string")
     * @var string 
     */
    protected $end_date;

}
?>

该错误会告诉您问题所在:

Zend'ServiceManager'ServiceManager::get was unable to fetch or create an instance for Promotions'Model'Link

含义:服务管理器不知道Promotions'Model'Link应该是什么。此密钥在 SMConfig 中不存在,或者在创建要返回的实例时发生一些错误。

TL/DR - 检查有关密钥Promotions'Model'Link的服务管理器配置

为了将数据保存在数据库中,您将需要实体管理器。

$link = new Link();
$link->setSalonId($salonId);
$link->setLink('/link/example');
$em = $this->getServiceLocator()->get('Doctrine'ORM'EntityManager');
$em->persist($link);
$em->flush();

您可以从上面的代码开始。

但是,最好创建存储库和服务层。该服务应有权访问实体管理器并保存您的逻辑。您的控制器应有权访问此服务。