Laravel URL 处理:控制器行为生成 URL 2 个改进

问题

假如我们定义了路由器:

Route::get('/home', 'HomeController@index');

也就是这个 /home URL 对应控制器 HomeController 里的 index 动作。我们如何通过控制器动作,如本例子中的 HomeController@index 来获取对应的 URL 呢?

回答

我们可以使用全局辅助函数 action 来生成(获取)给定的控制器行为的 URL。比如,以下代码获取 HomeController@index 控制器行为的 URL:

$url = action('HomeController@index');

可以看到, action 函数不需传递控制器的完整命名空间,只需传递相对于命名空间 App\Http\Controllers 的控制器类名,除了字符串语法,还可以使用数组语法方式指定控制器行为,数组的第一个元素是控制器类,第二个参数是行为名:

use App\Http\Controllers\HomeController;

$url = action([HomeController::class, 'index']);

如果控制器行为需要路由参数,可将它们作为第二个参数传递给 action 函数:

$url = action('UserController@profile', ['id' => 1]);

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!