2015-09-22 2 views
0

Дополнительная информация к моему предыдущему вопросу How to access a variable in my Service Теперь я пытаюсь получить доступ к Сервису из моего помощника по представлению через запрос Ajax.Zend Framework 2 Access Service через Ajax Request

Я добавил дополнительный метод в 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> 
  1. Можно ли получить доступ к Method в службе по запроса Ajax? До сих пор я всегда получал доступ только к контроллеру через запрос Ajax .
  2. Я полагаю, что я должен передать идентификатор объявления через Ajax, а также данные: {id: advertId}, что означает, что я должен писать и читать рекламу через jQuery, или есть другой способ получить его в моей службе?

Это, наверное, действительно глупый вопрос, но я все еще боюсь, когда пользуюсь Службой. Заранее спасибо за любую помощь.

ответ

2

Вы должны создать в своем контроллере действие, которое будет использовать эту службу, и вернуть результат обратно в сценарий jquery. В ZF2, запросы получить отправлены в согласованный контроллер-действия, действительно сырой пример должен выглядеть следующим образом:

public function addBookmarkAction() 
{ 
    $id = $this->getEvent()->getRouteMatch()->getParam('id'); 
    $this->getServiceLocator()->get("BookmarkAdvertService")->saveAdvertBookmark($id); 
    return $this->getResponse()->setStatusCode(200); 
} 

И вы должны добавить идентификатор в качестве параметра запроса в URL (также обновить маршрутизатор соответственно) , Или отправьте запрос через POST и вернитесь оттуда в свой контроллер.

+0

Благодарим за быстрый ответ. Хорошо, поэтому я не могу прыгнуть прямо к Сервису, если я правильно понимаю. Это на 100% уверен? Было бы слишком плохо, если это так ... В противном случае я попытаюсь реализовать свое решение. – Luka

+2

Нет, вы не можете. zf2, сконструированный таким образом, каждый запрос будет сначала попытаться сопоставить маршрутизатор и получить контроллер и действие, если есть совпадение. – taxicala

+0

О, хорошо, и чтобы снова подтвердить, мне нужен маршрут для AJAX Link? – Luka