【问题标题】:Laravel 8: routingLaravel 8:路由
【发布时间】:2021-09-01 04:22:46
【问题描述】:

是否可以在 Laravel 8 中不为类中的方法指定路由,即让它们自动工作?

假设有一个类CreateController 和方法

function doc() {...}

function pdf() {...}

function xls() {...}

也就是说,当以 site.com/create/doc 形式的地址访问 url 时,它会计算出类 CreateController 的方法 doc

或者没有这种可能性,你必须为每个方法注册一个路由,即

Route::get('/create/doc', 'CreateController@doc');
Route::get('/create/pdf', 'CreateController@pdf');
Route::get('/create/xls', 'CreateController@xls');
...

【问题讨论】:

  • 试试 for 循环?
  • Route::get('/create/{type}', 'CreateController@create');将类型传递给 create 函数可能是另一种方式

标签: php laravel routes


【解决方案1】:

不是直接在第二个字符串参数中,而是如果你把这个参数做成回调函数:

Route::get('/create/{type}', function(string $type) {
    return (new CreateController)->{$type}();
})->where('type', 'doc|pdf|xls');

如果您想允许所有方法作为类型并保持其动态,以便您可以在不编辑路由的情况下添加到控制器或从控制器中删除:

$class = new ReflectionClass(CreateController::class);
$methods = $class->getMethods(ReflectionMethod::IS_PUBLIC);
Route::get('/create/{type}', function(string $type) {
    return (new CreateController)->{$type}();
})->where('type', implode('|', $methods));

【讨论】:

  • 感谢它为我工作在第一个示例中,您需要使用“使用 App\Http\Controllers\CreateController;”否则会报错 Class 'CreateController' not found
  • @СергейБарахтенко 是的,你应该导入它,或者放一个反斜杠 \CreateController
猜你喜欢
  • 2021-08-17
  • 2021-07-11
  • 1970-01-01
  • 2021-03-31
  • 2021-07-13
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多