2015-04-09 2 views
0

У меня есть несколько сложных команд, которые я разделил на «вспомогательные команды» (пример ниже). Поскольку мой сайт является многодоменным, мне нужна возможность настройки последовательности и состава вспомогательных команд для выполнения (до сих пор это было в конфигурации под L4). С переходом на L5 я реорганизую эту функцию с помощью командной шины.Как я могу назвать партию команд Laravel5?

Пример последовательности команд: сайт A:

1) AuthorizeCharge 
2) DoSomethingA 
3) DoSomethingB 
4) Charge 

Сайт B

1) AuthorizeCharge 
2) DoSomethingA 
3) DoSomethingC 
4) DoSomethingD 
5) Charge 

Каждый из этих позиций является команда с его Обработчик. Эта часть мне совершенно понятна (и отлично работает).

Как я могу отправить это элегантно в своем контроллере?

Вот что я уже пробовал.

Стационарное исполнение (работы) (в контроллере):

$return = $this->dispatch(new DoSomethingACommand($form)); 
$return[] = $this->dispatch(new DoSomethingBCommand($form)); 

Переменная версия (псевдокод):

someconfig.php

return [ 
    'DoSomethingACommand', 
    'DoSomethingBCommand' 
]; 

App \ Пространство имен \ HTTP \ \ Controller SomeController.php

... 

//loop over all scenario commands 
for ($j = 0; $j < count($commands); $j++) 
{ 
    //make the object which we need to act on 
    $object = \App::make($this->_namespace . '\\'. $commands[ $j ]); 

    $return[] = $this->dispatchFrom($object, $form); //Doesnt work 
} 

Я немного зациклен на том, как это решить. Любые советы о том, как я могу это реализовать?

ответ

0

Почему у вас просто нет основной команды, которая затем вызывает все остальные под-команды?

Итак, у вас есть одна главная команда, вызванная вашим контроллером, которая называется HandlePaymentProcessCommand. Тогда внутри этой команды вы затем вызвать суб-команду

1) AuthorizeCharge 
2) DoSomethingA 
3) DoSomethingC 
4) DoSomethingD 
5) Charge 

Таким образом, суб-команды обрабатываются все в одном месте (основная команда) - и легко настраивается, чтобы быть изменено.

+0

Я не понимаю, как это поможет: HandlePaymentProcessCommand должен был бы быть конкретным для этого «сайта 1/домен», в то время как мне пришлось бы создать еще один HandlePaymentProcessCommand для «Site 2/Domain», поскольку содержимое или подкоманды будут несколько иначе. – Literallyafloat

+0

Просто у вас есть одна конкретная команда для каждого сайта на контроллере. Затем эта команда вызывает определенные подкоманды. – Laurence

+0

Хорошо, спасибо - это предложение работает для меня! В любом случае у меня есть конкретный пакет «сайт/домен» с конкретными функциями клиента и представлениями/активами, поэтому я создал основную команду в пакете бренда и называет отдельные «подкоманды» из основного пакета. – Literallyafloat

Смежные вопросы