symfony - вызов действия из другого действия - PullRequest
0 голосов
/ 30 мая 2011

У меня есть два разных действия в двух разных модулях, и мне нужно выполнить одно из них внутри другого.

рассмотрим следующие действия:

//first module
class module1Actions extends sfActions {

     protected function function1Form(sfWebRequest $request, sfForm $form) {
       //i need to call a function from module2 in here to do sth but i don't need any view to be returned.
       //but i need some variables to be returned by the second action
     }
}

//second module
class module2Actions extends sfActions {

     protected function executeSth(sfWebRequest $request, sfForm $form) {
       //Do Something in here and return some values.
     }
}

как я уже сказал, мне нужно выполнить действие и получить от него некоторые значения, но я не знаю, как его вызвать. это в другом модуле. могу ли я получить к нему доступ? как? и как мне вернуть значения?

спасибо.

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

В зависимости от того, как вы получаете эти значения, это лучшие пути:

  1. Если вы получаете их с помощью операций над записью или таблицей, переместите код в слой модели и назовите его обоими вашими действиями

  2. Если вы получаете их другим способом (например, обрабатываете пользовательский ввод), создайте служебный класс в вашей папке lib, добавьте его туда как функцию и вызовите это из обоих ваших действий

Таким образом, вы предотвращаете дублирование кода и по-прежнему не нарушаете разделение проблем MVC.

0 голосов
/ 25 мая 2013

Я бы добавил третий способ сделать это к ответу Мэрлина. Это полезно в нескольких ограниченных ситуациях, чтобы предотвратить дублирование кода, но также не нарушать правильную конструкцию MVC, перемещая неправильный код на уровень модели.

  • Сохраните значения, которые будут отправлены / и / или возвращены в классе myUser, затем используйте вызов $this->forward(), чтобы выполнить соответствующее действие, не заставляя браузер выполнить другой запрос.

Обратите внимание, что $ this-> forward () немедленно останавливает действие, из которого вы вызываете его, и будет отображаться шаблон для перенаправленного действия.

...