除上一个问题How to access a variable in my Service之外的其他问题 我现在正在努力通过Ajax请求从我的View Helper访问服务。
我在BookmarkAdvertService()中添加了另一个方法来添加书签。
public function saveAdvertBookmark($advertId)
{
$bookmark = new Bookmark();
$userId = $this->getUserEntity()->getId();
$bookmark->setUserId($userId);
$bookmark->setAdvertId($advertId);
# write new bookmmark to database tbl bookmark
$this->getEntityManager()->persist($bookmark);
$this->getEntityManager()->flush();
}
在我的部分中,我添加了一个链接
<?php if($bookmarkStatus==true){ ?>
Saved !
<a href="#" id="remove-bookmark">Remove Bookmark</a>
<?php }else{ ?>
<a href="#" id="add-bookmark">Add Bookmark</a>
<?php }?>
<script>
$("#add-bookmark").click (function () {
$.ajax({
dataType: 'json',
url: '/add-bookmark',
success: function(response) {
window.location.reload(true);
}
});
});
});
<script>
这可能是一个非常愚蠢的问题,但在使用服务时我仍然很挣扎。非常感谢您提前寻求帮助。
答案 0 :(得分:2)
您应该在控制器中创建一个将使用该服务的操作,并将结果返回给jquery脚本。在zf2中,请求被分派到匹配的控制器动作,一个真正原始的例子应如下所示:
public function addBookmarkAction()
{
$id = $this->getEvent()->getRouteMatch()->getParam('id');
$this->getServiceLocator()->get("BookmarkAdvertService")->saveAdvertBookmark($id);
return $this->getResponse()->setStatusCode(200);
}
您应该将id添加到url的查询参数中(也相应地更新路由器)。或者通过POST发送请求并从控制器中进行检索。