为什么PHP框架Laravel不赞成路由功能;控制员;从5.2版开始?
我曾经使用框架Laravel 5.x routes,如下所示:为什么PHP框架Laravel不赞成路由功能;控制员;从5.2版开始?,php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,我曾经使用框架Laravel 5.x routes,如下所示: Route::controller("demo", "\App\Http\Controllers\DemoController"); 但是,当我阅读Laravel5.2中的路由代码时,我发现它从5.2版开始就被弃用了,在file\illumb\routing\Router中 /** * Route a controller to a URI with wildcard routing. * * @param string
Route::controller("demo", "\App\Http\Controllers\DemoController");
但是,当我阅读Laravel5.2中的路由代码时,我发现它从5.2版开始就被弃用了,在file\illumb\routing\Router中
/**
* Route a controller to a URI with wildcard routing.
*
* @param string $uri
* @param string $controller
* @param array $names
* @return void
*
* @deprecated since version 5.2.
*/
public function controller($uri, $controller, $names = [])
{
$prepended = $controller;
// First, we will check to see if a controller prefix has been registered in
// the route group. If it has, we will need to prefix it before trying to
// reflect into the class instance and pull out the method for routing.
if (! empty($this->groupStack)) {
$prepended = $this->prependGroupUses($controller);
}
$routable = (new ControllerInspector)
->getRoutable($prepended, $uri);
// When a controller is routed using this method, we use Reflection to parse
// out all of the routable methods for the controller, then register each
// route explicitly for the developers, so reverse routing is possible.
foreach ($routable as $method => $routes) {
foreach ($routes as $route) {
$this->registerInspected($route, $controller, $method, $names);
}
}
$this->addFallthroughRoute($controller, $uri);
}
我认为这是一个很好的特性,但为什么他们不赞成呢
还有其他更好的解决方案吗
=更新1=
正如问题()所说,他认为该功能会使路由变得混乱,或者容易导致访问意外的路由定义。根据Github问题()
格瑞普说:
这种方法有很多问题,而且由于路由文件中没有直接引用路由定义,因此也会使路由定义混淆。这有时可能会导致意外的路由定义(例如,如果像getFilesystem这样的方法被添加到父级或trait-developer错误中,但可能未被注意到)
当中间件应用于特定方法时(例如,有人向控制器添加了新方法,但忘记添加中间件),也可能会导致安全错误,这在手动定义路由时很少出现
最后是参数问题,由于分组或其他意外的路由组合,这一问题很难解决(参见#10774)
为了减少中断量,应在下一个5.1.x版本中将其标记为已弃用
可能的替代方案:在主版本中将此方法标记为已弃用,并在下一个主要版本中删除。根据Github问题()
格瑞普说:
这种方法有很多问题,而且由于路由文件中没有直接引用路由定义,因此也会使路由定义混淆。这有时可能会导致意外的路由定义(例如,如果像getFilesystem这样的方法被添加到父级或trait-developer错误中,但可能未被注意到)
当中间件应用于特定方法时(例如,有人向控制器添加了新方法,但忘记添加中间件),也可能会导致安全错误,这在手动定义路由时很少出现
最后是参数问题,由于分组或其他意外的路由组合,这一问题很难解决(参见#10774)
为了减少中断量,应在下一个5.1.x版本中将其标记为已弃用
可能的替代方案:在master中将此方法标记为已弃用,并在下一个主要版本中删除。这是最好向laravel的开发人员提出的问题,你不这么认为吗?我想是的,但是我们能找到原因吗?似乎没有给出任何原因。。。如果它已被弃用,还有更好的方法吗?您查看过资源控制器了吗?您还可以通过
Route::get()
实现同样的功能是的,这个功能当然可以通过Route::any/get/post…
的基本用法来实现。我只是想知道我们是否可以定义一些东西来防止混乱的路线定义,从而避免不推荐。这是一个最好向拉威尔的开发者提出的问题,你不认为吗?我认为是的,但是我们能找到原因吗?似乎没有给出任何理由。。。如果它已被弃用,还有更好的方法吗?您查看过资源控制器了吗?您还可以通过Route::get()
实现同样的功能是的,这个功能当然可以通过Route::any/get/post…
的基本用法来实现。我只是想知道我们是否可以定义一些东西来防止令人困惑的路由定义,从而避免不推荐。