我以前使用Framework Laravel 5.x路由如下:
Route::controller("demo", "\App\Http\Controllers\DemoController");
但是当我在Laravel 5.2中阅读路由代码时,我发现自5.2版以来,它已被弃用,位于文件\ Illuminate \ 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 =
正如问题(https://github.com/laravel/framework/pull/10777)所说,他认为该功能会使路线混乱,或者容易导致访问意外的路线定义。
答案 0 :(得分:0)
根据Github问题(https://github.com/laravel/framework/pull/10777)
rkgrep说:
此方法存在很多问题,并且还会使路由定义混乱,因为它们未在路径文件中直接引用。这有时可能会导致意外的路由定义(例如,如果将getFilesystem等方法添加到父级或特性 - 开发人员的错误,但可能会被忽视)。
当中间件应用于特定方法时(例如有人向控制器添加新方法并忘记添加中间件),这也可能导致安全性错误,这种情况在手动定义路由时很少出现。
最后 - 参数问题,由于分组或其他意外的路线组合而难以修复(参见#10774)。
要减少休息时间,应在下一个5.1.x版本中将其标记为已弃用。
可能的替代方法:将此方法标记为master中已弃用,并在下一个主要版本中删除。