Zend framework2 Zend Framework2如何访问我的服务中的变量

Zend framework2 Zend Framework2如何访问我的服务中的变量,zend-framework2,Zend Framework2,我正在创建我的第一个Zend Framework2项目。我的页面提供了创建广告的选项。我现在想提供一个选项,为广告添加书签。需要做的是,当你在广告页面上时,网站将检查你是否登录,如果你是,网站将检查广告是否已添加书签,并显示消息,否则它将为你提供一个链接,将广告添加到书签中。当您未登录时,也会显示此链接,如果您单击“登录”,则会将您重新定向到“登录”页面 无论如何,为了实现上述目标,我创建了一个视图帮助器,它由书签工厂创建。我还创建了一个书签广告服务,用于检查当前书签状态。为此,我需要用户ID和

我正在创建我的第一个Zend Framework2项目。我的页面提供了创建广告的选项。我现在想提供一个选项,为广告添加书签。需要做的是,当你在广告页面上时,网站将检查你是否登录,如果你是,网站将检查广告是否已添加书签,并显示消息,否则它将为你提供一个链接,将广告添加到书签中。当您未登录时,也会显示此链接,如果您单击“登录”,则会将您重新定向到“登录”页面

无论如何,为了实现上述目标,我创建了一个视图帮助器,它由书签工厂创建。我还创建了一个书签广告服务,用于检查当前书签状态。为此,我需要用户ID和广告ID

在我的module.php中,我注入了userEntity,以便能够在BookmarkAdvertService中获取UserId,但现在我不确定如何从服务访问AdvertId。有人能给我一个建议吗

module.php

Service\BookmarkAdvertService.php

}

View\Helper\BookmarkAdvertFactory.php

View\Helper\BookmarkAdvert.php


您需要将广告ID传递给view helper,后者可以将其传递给服务。

这是我的想法,但我不确定如何实现它。我已经更新了module.php以显示getViewHelperConfig。这是我必须交出的吗?如果是的话,它是如何工作的?当你调用一个视图助手时,你会提供像$this->bookmarkard$advertId这样的参数;调用函数可以接收它。因此,在声明中,您可以使用函数uu invoke$advertId{…}非常好,多么简单:-非常感谢您的帮助!!!现在我只需要找出剩下的,比如设置书签和删除书签,我想用Ajax。。。再次感谢,它现在起作用了。
'Advert\BookmarkLink' => function ($sl) {
                        $entityManager = $sl->get('doctrine.entitymanager.orm_default');
                      //$advertId = '395';
                        $myService = new Service\BookmarkAdvertService($advertId);
                        $myService->setEntityManager($entityManager);

                        $repository = $entityManager->getRepository('Advert\Entity\Bookmark');
                        $myService->setRepository($repository);

                        $authService = $sl->get('zfcuser_auth_service');
                        $userEntity = $authService->getIdentity();
                        $myService->setUserEntity($userEntity);

                        return $myService;
                    },  

public function getViewHelperConfig()
{
    return array(
        'factories' => array(
              'displayBookmarkLink' => 'Advert\View\Helper\BookmarkAdvertFactory')
}    
namespace Advert\Service;

use Advert\Entity\Bookmark as BookmarkEntity;
use Advert\Repository\BookmarkRepository;
use Doctrine\ORM\EntityManager;
use Zend\Debug\Debug;


class BookmarkAdvertService 
{
  protected $location;
  protected $userEntity;

  public function __construct($advertId)
  {
    $this->advertId = $advertId;

  }

  public function setEntityManager(EntityManager $entityManager)
  {
    $this->entityManager = $entityManager;
  }

  public function setRepository(BookmarkRepository $repository) {
    $this->repository = $repository;
  }

  public function setUserEntity($userEntity)
  {
    $this->userEntity = $userEntity;
  }

  public function getUserEntity()
  {
    return $this->userEntity;
  }


  public function checkAdvertBookmarkStatus()
  {
    $userId = $this->getUserEntity()->getId();
    $bookmarkStatus = $this->repository->getBookmarkStatus($this->advertId,$userId);

    return $bookmarkStatus;
  }
namespace Advert\View\Helper;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class BookmarkAdvertFactory implements FactoryInterface
{

  public function createService(ServiceLocatorInterface $serviceLocator)
  {
    $locator = $serviceLocator->getServiceLocator();
    $service = $locator->get('Advert\BookmarkLink');
    $helper  = new BookmarkAdvert($service);

    return $helper;
  }
}
namespace Advert\View\Helper;
use Zend\View\Helper\AbstractHelper;

class BookmarkAdvert extends AbstractHelper
{

  protected $service;

  public function __construct($service)
  {
        $this->service = $service;
  }

  public function __invoke()
  {
    $bookmarkStatus = $this->service->checkAdvertBookmarkStatus();
    return $this->render($bookmarkStatus);
  }

  public function render($bookmarkStatus)
  {
    return $this->getView()->render('advert/partial/bookmarklink', array('bookmarkStatus' => $bookmarkStatus));

  }          
}