Laravel URL 处理:控制器行为生成 URL
问题
假如我们定义了路由器:
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]);