zend framework 2 - 在数据库中保存数据时出现ServiceManager错误

时间:2013-10-28 10:25:54

标签: php zend-framework zend-framework2

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

在我的PromotionsController中我有这个动作:

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

我在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;


}
?>

2 个答案:

答案 0 :(得分:0)

错误告诉您问题所在:

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

含义:ServiceManager不知道Promotions\Model\Link应该是什么。此密钥要么在SMConfig中不存在,要么在创建要返回的实例时发生一些错误。

TL / DR - 检查有关密钥Promotions\Model\Link

的ServiceManager配置

答案 1 :(得分:0)

为了将数据保存在数据库中,您将需要entitymanager。

$link = new Link();
$link->setSalonId($salonId);
$link->setLink('/link/example');

$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$em->persist($link);
$em->flush();

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

但是,最好是创建存储库和服务层。该服务应该可以访问entityManager并保留您的逻辑。您的控制器应该可以访问此服务。