Ant*_*ado 8 php laravel laravel-routing laravel-5.4
我在Laravel 5.4中创建了一个包,它建立了一个基本的后台.此程序包包含几个使用程序包内的控制器的路径.我想要做的是覆盖我的应用程序中包定义的路由,以插入自定义控制器.例如,如果我有路线
Route::get('login', [
'as' => 'admin.login',
'uses' => 'Auth\LoginController@showLoginForm'
]);
Run Code Online (Sandbox Code Playgroud)
在我的包中定义,将使用Vendor\Package\Controllers\Auth\LoginController我想为我的应用程序定义一个路由,该路由将覆盖该路由并使用App\Controllers\Auth\LoginController.
在应用程序路径文件中定义路径的明显方法失败,因为应用程序路径文件在程序包路由文件之前运行,因此将以程序包定义为准.
有没有办法完成这种事情?
我还试图获取特定路径RouteServiceProvider并使用该方法uses设置应该用于解决它的控制器,就像这样
public function boot()
{
parent::boot();
Route::get('admin.login')->uses('App\Http\Controllers\Admin\Auth\LoginController@showLoginForm');
}
Run Code Online (Sandbox Code Playgroud)
但这也无法实现假装.
关于我做错了什么的线索?
the*_*len 17
在提供者数组中的config/app.php中,先将包的服务提供者放入您的路由,然后在您的路由中,您将能够使用自定义路由覆盖它.App\Providers\RouteServiceProvider::class,web.php
小智 9
另一种选择——不必与服务提供者的顺序混淆——是为控制器添加一个绑定。例如在 AppServiceProvider 中,
$this->app->bind(
\Vendor\Package\Controllers\Auth\LoginController::class,
App\Controllers\Auth\LoginController::class
);
Run Code Online (Sandbox Code Playgroud)
您必须匹配控制器方法名称,但您已经在示例中这样做了。
(这个答案的警告:我没有在 Laravel 5.4 中测试过它,但我只是在 Laravel 6.0 中使用 Laravel 5.6 中添加的 $bindings 属性做了这个。也就是说,这应该是正确的 5.4 语法,用于做同样的事情)。
编辑:对于 Laravel 6+,您可以改为将绑定添加到 AppServiceProvider 中的 bindings 数组:
public $bindings = [
\Vendor\Package\Controllers\Auth\LoginController::class =>
App\Controllers\Auth\LoginController::class,
// other bindings
]
Run Code Online (Sandbox Code Playgroud)