Laravel:控制器是否需要扩展Illuminate \ Routing \ Controller?为什么?

时间:2018-06-04 21:30:22

标签: php laravel

  • 控制器是否需要扩展Illuminate\Routing\Controller
  • 如果使用了不扩展Illuminate\Routing\Controller的简单控制器类,会发生什么?
  • 延长Illuminate\Routing\Controller有什么好处?

示例:

use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
}


class UserController extends Controller
{
    public function show($id)
    {
        // ...
    }
}


Route::get('user/{id}', 'UserController@show');

VS

class Controller
{
}


class UserController extends Controller
{
    public function show($id)
    {
        // ...
    }
}


Route::get('user/{id}', 'UserController@show');

2 个答案:

答案 0 :(得分:0)

检查以下问题的答案

  1. 扩展基本控制器不是必须的。无需扩展基本控制器即可正常工作。

  2. 它会照常工作而不会产生任何问题,会显示您的预期结果。

  3. 它将为您的简单控制器带来许多好处。始终建议使用基本控制器。它包含很多内容,如中间件

    public function middleware($middleware, array $options = [])
    {
    foreach ((array) $middleware as $m) {
        $this->middleware[] = [
            'middleware' => $m,
            'options' => &$options,
        ];
    }
    
    return new ControllerMiddlewareOptions($options);
    }
    
  4. 魔法

    public function __call($method, $parameters)
    {
        throw new BadMethodCallException("Method [{$method}] does not exist on [".get_class($this).'].');
    }
    

    只需探索该课程,您就可以完全了解在扩展课程后您可以做些什么。

答案 1 :(得分:0)

根据Laravel的官方文档,不需要控制器来扩展基类。但是,您将无法使用便捷功能,例如middlewarevalidatedispatch方法。

参考:https://laravel.com/docs/6.x/controllers#defining-controllers