Как выполнить оставшийся код после вызова другого метода в том же контроллере в Laravel? - PullRequest
1 голос
/ 27 апреля 2019

Я использую Laravel 5.8.В моем контроллере Laravel есть две функции.После вызова одной функции в другую оставшийся код не выполняется.Есть ли способ выполнить оставшееся тело функции?Я пытался вызвать функцию без оператора возврата функция не вызывается.

public function a(){
    return "function a";
}

public function b(){
    return $this->a();
 // after the above statement remaining code does not execute
    echo "function b";
}

Ответы [ 3 ]

0 голосов
/ 27 апреля 2019

Это вполне нормальная реакция для PHP

Пожалуйста, проверьте руководство "возврата" отсюда: https://php.net/manual/en/function.return.php

Он говорит: "... Если вызывается из функции, оператор return немедленно завершает выполнение текущей функции и возвращает ее аргумент в качестве значения вызова функции. ..."

Надеюсь, это поможет.

0 голосов
/ 28 апреля 2019

Вы хотите использовать данные, возвращаемые функцией a в функции b?

public function a()
{
    $collection = DB::table('foo')->get();

    return $collection;
}


public function b()
{
    $data = $this->a();

    // Do something 
    dd( $data );

}
0 голосов
/ 27 апреля 2019

Ключевое слово return дает ответ на вашу путаницу.Возврат означает выполнение этой строки и выход из функции.Конечно, это не будет продолжаться с остальной частью кода.Это зависит от того, что вы хотите сделать с результатом первой функции, но если вы хотите получить результат, вы можете сохранить его в переменной и использовать его для других вычислений, например, это будет работать:

public function b(){
    $result = $this->a();

    echo "function b and result of a: " . $result;
}

--- EDIT

После вашего комментария ниже, лучший способ проверить, вошел ли пользователь в систему или нет, это не иметь отдельной функции для этого, но вы можете добиться этого, используя middleware ,Таким образом, вместо отдельной функции, на вашем маршруте вы можете определить ее следующим образом:

Route::get('endpoint', 'YourController@b')->middleware('auth');

Это промежуточное ПО будет перенаправлять пользователя на страницу входа, если он не вошел в систему.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...