Symfony2 - получить результат возврата из опции обслуживания вызовов

1

Я пытаюсь получить результат возврата из метода, выполняемого опцией вызова службы. Итак, My service.xml:

<service id="myService" class="serviceClass">
    <argument type="service" id="..."/>
    <argument type="service" id="..."/>        
    <call method="myReturnProblem"/>
</service>

Мой метод обслуживания:

function serviceMethod(){
    ...
    $foo = "bar"
    var_dump($foo);
    return true;
}

Мой контроллер:

function sampleAction(){
    ...
    $this->get('my_Service');
    return Response...
}

Таким образом, я могу видеть с var_dump, что метод работает, как я надеюсь, но я не знаю, как я могу получить true (такая же проблема, если я пытаюсь получить $ foo или что еще).

Прямо сейчас, если я сделаю:

if($this->('my_Service))

он не работает, потому что он не содержит результата. Чтобы получить его, я должен сделать что-то вроде

if($this->('my_Service')->serviceMethod())

но он запускает serviceMethod два раза.

Я хотел сделать что-то вроде:

if($this->get('my_Service')){}

Есть идеи? Благодарю.

  • 1
    if($this->get('my_Service')->serviceMethod()) опечатка?
  • 0
    Извините, я не уверен, что понимаю, что вы имеете в виду, но, если ($ this-> get ('my_Service') -> serviceMethod ()) выполнит serviceMethod (который уже выполняется опцией вызова), но в этом случае вернуть результат (здесь верно по моему образцу)
Теги:

1 ответ

0

То, что вы сделали, называется Setter Injection, ссылки доступны здесь и здесь

Как следует из названия, он предназначен для ввода услуги в другую службу, а не для возврата значения.

Чтобы достичь цели результата, вы должны создать регулярный метод внутри службы для обработки значений и затем вернуть результат.

public function myMethod()
{
    ...
    $foo = "bar";
    var_dump($foo);
    return true;
}
  • 0
    Спасибо, что нашли время. Я попытался обработать внутри моего конструктора службы и добавить область, но он возвращает тот же результат, что и с внедрением сеттера (не желаемый результат, а объект службы). Что касается обычного метода, я должен вызвать его в моем контроллере, чтобы получить результат. Мне интересно, как получить это, просто позвонив в службу.
  • 0
    Ах, ты прав. Я думал, что служба с prototype будет работать так же, как создание нового экземпляра объекта. Я обновил свой ответ, удалив эту часть. Я думаю, что нет другого пути, кроме как вызвать обычный метод.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню