在另一个类中停止laravel控制器操作

时间:2018-05-03 09:19:45

标签: php laravel laravel-5

想象一下,我有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();

但是这总是会停止存储方法并返回。

我怎样才能做到这一点?

P.S:我想在我的check()方法中发送JSON响应,我不想在我的控制器中使用这个逻辑,这就是我这样做的原因。

2 个答案:

答案 0 :(得分:1)

您可以将其置于if状态,如下所示:

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

这样它会检查$newClass->check()是否返回false,如果是,它将停止在store方法内执行。

答案 1 :(得分:-1)

在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;
        }
    }
}