2016-08-26 6 views
1

Я создаю публичный API, используя Laravel 5.2. Чтобы сохранить код в кратко- и контроллера, я создал несколько вспомогательных функций, одна из которых является функция возвращает ответ на вызов API, как показано ниже:Laravel - ответ возврата от помощника

if (! function_exists('buildResponse')) 
{ 
    function buildResponse($data) 
    { 
     return response()->json($data)->header('foo', 'bar'); 
    } 
} 

Это, как я назвал бы его от контроллер:

public function registration() 
{ 
    buildResponse(['a' => 'Success']); 
} 

Однако это не работает. Он работает, только если я добавлю return перед функцией.

public function registration() 
{ 
    return buildResponse(['a' => 'Success']); 
} 

Можно сказать: "Хорошо, тогда просто включите return!". Дело в том, эта конкретная функция будет вызвана другой вспомогательной функцией, например:

if (! function_exists('throwResponseCode')) 
{ 
    /** 
    * Throws a response code to the client. 
    * @param $code 
    * @return mixed 
    */ 
    function throwResponseCode($code) 
    { 
     switch ($code) { 
      case '101': 
       $data[$code] = 'Unable to establish a database connection'; 
       return buildResponse($data); 
      // Other cases here 
     } 
    } 
} 

Есть ли способ, что я могу отправить ответ клиенту от вспомогательной функции?

ответ

3

Оставьте заявку простой bro!

Изменить

return response()->json($data)->header('foo', 'bar'); 

Для

return response()->json($data)->header('foo', 'bar')->send(); 
+0

Это _almost_ работает! Мне просто нужно, чтобы контроллер завершил выполнение после отправки ответа. Добавление 'die()' не завершает его, и я не думаю, что это элегантный способ отделки. – baskoros

+0

Да. Вы не должны ничего делать после отправки ответа в браузер – KmasterYC

0

Короткий ответ, нет. Не напрямую.

Цель return - закончить функцию и дать результаты. Laravel считает возвращаемое значение контроллера ответом, поэтому другие функции не могут сделать это с помощью return.

Есть некоторые моменты вокруг этого. Учти это. Создайте middleware, который работает после того, как ответ был сгенерирован контроллером, то есть вызовы $next($request) в первой строке. Здесь вы можете изменить ответ, как пожелаете. Чтобы подключить помощников к этому промежуточному программному обеспечению, вы можете использовать статические методы или свойства. Логикой промежуточного программного обеспечения было бы то, что если кто-то поставил что-то, скажем, статическое свойство промежуточного программного обеспечения, то отправьте его вместо ответа контроллера.

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