2015-11-26 2 views
1

У меня возникли проблемы с попыткой вызвать маршрут в моем проекте Symfony2 в качестве контроллера, на который я указываю, чтобы для создания экземпляра требуются параметры (а именно имя пользователя и пароль).Передача аргументов конструктора в файле ym маршрутизации в Symfony

Вот ситуация:

Я интегрируя Kashflow в мой проект, и одна из вещей, которые мне нужно сделать, чтобы иметь возможность отправлять платежи счета-фактуры от моего CRM на счет Kashflow. Когда нажата кнопка «Push Payment», она запускает вызов ajax, который отправляет необходимые данные методу prepareInvoicePayment() в моем контроллере Kashflow и для целей тестирования просто возвращает запрос, чтобы я мог видеть, что возвращается.

Мой Аякса:

$('.push-kashflow-payment').on('click', function(e) { 
     var answer = confirm('Are you sure?'); 
     var invoiceID = $(this).attr('id').split("_")[0]; 
     var accountID = $(this).attr('id').split("_")[1]; 
     var method = 2; 
     var amount = $(this).parent().parent().find('.amount').html(); 

     if (answer) { 
      $.post('/kashflow-push-payment', { invoiceID: invoiceID, method: method, accountID: accountID, amount: amount } 
      ).done(function(response) { 
       console.log(response); 
      }); 
     } 

     e.preventDefault(); 

     return false; 
    }); 

Проблема:

МОЯ файл маршрутизации следующая запись:

app_push_kashflow_payment: 
    path: /kashflow-push-payment 
    defaults: { _controller: AppBundle:Kashflow:prepareInvoicePayment } 

Но класс Kashflow требует имя пользователя и пароль, который будет принят в конструктор:

function __construct($user, $pass) 
    { 
     // Set the username and password 
     $this->username = $user; 
     $this->password = $pass; 

     // Hide some simple XML errors we dont want to see 
     libxml_use_internal_errors(true); 
    } 

Когда запрос Ajax передается на контроллер, я получаю возвращается следующая ошибка:

Предупреждение: Отсутствует аргумент 1 для AppBundle \ Controller \ KashflowController :: __ конструкт()

Итак, мой вопрос в том, как передать эти значения в файле маршрутизации? Это даже способ сделать это? Если возможно, я предпочел бы установить свое имя пользователя и пароль в файле parameters.yml, а затем ссылаться на это - но в любом случае мне нужно иметь возможность передавать эти параметры, чтобы вызов работал.

Любая помощь приветствуется, спасибо!

+1

Использование инъекций и услуг зависимостей – Robert

ответ

1

Вам необходимо определить контроллер как службу: How to Define Controllers as Services и передать все аргументы в конфигурации определения службы.