Остановить действие контроллера laravel в другом классе - PullRequest
0 голосов
/ 03 мая 2018

Представьте, что у меня есть PostController следующим образом:

class PostsController extends \App\Http\Controllers\Controller
{
    public function store(Request $request) {

        $newClass = new myNewClass();
        $newClass->check();

        // ... 
        // continue to store the post
        // ...     

    }
}

Теперь я хочу, чтобы $newClass->check() прекратил действие, если что-то проверяется. это всего лишь пример кода, и поведение упомянутых методов больше, чем просто.

в моем методе проверки у меня есть:

class MyNewClass
{
    public function check() {

        // I want to send the response directly from here
        // but it doesn't work
        // I tried:
        // return response()->json(['error' => 'auth error'], 403);
        // the line above is not working, that's all I want
        // NOTE: abort(403) works here
        // NOTE: dd('xxxxx') works here
        // but response() doesn't

    }
}

Я могу это исправить, вернув значение в моем PostsController:

return $newClass->check();

Но это всегда останавливает метод store и возвращает.

Как мне этого добиться?


P.S .: Я хочу отправить ответ JSON в своем методе check(), я не хочу эту логику в моем контроллере, и именно поэтому я делаю это.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

В файле MyClass

class MyNewClass
{
    public function check() {
        return false;
    // I want to send the response directly from here
    // but it doesn't work
    // I tried:
    // return response()->json(['error' => 'auth error'], 403);
    // the line above not working, that's all I want
    // NOTE: abort(403) works here
    // also dd('xxxxx') works here
    // but response() doesn't
        return response();
    }
}

затем в вашем контроллере проверьте возврат

class PostsController extends \App\Http\Controllers\Controller
{
    public function store(Request $request) {

        $newClass = new myNewClass();

        if($newClass->check()) {

            // ... 
            // continue to store the post
            // ...     
            return $newClass->check();
        }
    }
}

Я думаю, что этот код должен работать с вами

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

class PostsController extends \App\Http\Controllers\Controller
{
    public function store(Request $request) {

        $newClass = new myNewClass();

        if($return = $newClass->check()) {

            // ... 
            // continue to store the post
            // ...     
            return $return;
        }
    }
}
0 голосов
/ 03 мая 2018

Вы можете поместить его в состояние if, например:

if(!$newClass->check()) {
     return false; //replace this with whatever you want
}

Таким образом, он будет проверять, возвращает ли $newClass->check() false, и если он это делает, то останавливает выполнение внутри метода store.

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