在laravel中的同一控制器内调用另一个方法后,如何执行剩余代码?

时间:2019-04-27 19:02:44

标签: php laravel model-view-controller frameworks

我正在使用laravel 5.8。我的laravel控制器中有两个功能。将一个函数调用到另一个后,其余代码将不执行。有没有办法执行剩余的功能?我尝试了不使用return语句调用函数的情况。

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 :(得分:0)

return关键字为您的困惑提供了答案。返回表示执行此行并退出功能。当然,它将不会与其余代码一起继续。 这取决于您要对第一个函数的结果执行的操作,但是如果您想要结果,可以将其存储在变量中并将其用于其他计算,例如,这将起作用:

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

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

---编辑

在下面发表评论后,检查用户是否已登录的最佳方法是为此没有单独的功能,但是可以使用middleware来实现。因此,除了具有单独的功能之外,您还可以在路线上将其定义为:

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

除非用户登录,否则该中间件会将用户重定向到登录页面。

如果上述方法均不能解决您的问题,那么我发现与您的原始here重复的问题。

答案 1 :(得分:0)

对于PHP,这是很正常的反应

请从此处查看“返回”手册: https://php.net/manual/en/function.return.php

它说:“ ...如果从函数内部调用,则return语句立即终止当前函数的执行,并将其参数作为函数调用的值返回。...

我希望这会有所帮助。

答案 2 :(得分:0)

您要使用函数a中从函数b返回的数据吗?

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

    return $collection;
}


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

    // Do something 
    dd( $data );

}