Jun*_*ior 4 php laravel laravel-routing laravel-5 laravel-5.1
我使用 laravel 5.2 构建了一个小应用程序。我将所有文件放入名为 Surveys 的文件夹中,该文件夹位于App/Modules/Surveys. “不用担心,我打算将模块移出 App 文件夹,我只需要让控制器工作”
目前我的控制器位于 App/Http/Controllers/SurveysController
我想移动我的控制器文件夹,使其位于 App/Modules/Surveys/Controllers/Frontend/SurveysController
我如何告诉 laravel 将控制器解析出这条路径App/Modules/Surveys/Controllers/Frontend/而不是App/Http/Controllers?
我试图对服务提供商执行此操作,但仍然无法正常工作
<?php
namespace App\Modules\Surveys\Providers;
use Illuminate\Support\ServiceProvider;
class PackageServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
if (! $this->app->routesAreCached()) {
require __DIR__.'/../routes.php';
}
}
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->make('Modules\Surveys\Controllers\Frontend\SurveyController');
}
}
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能使路由指向正确的控制器?
只是为了清楚起见,我的应用程序讲师从应用程序开始
App/Https/Controllers
App/Modules/Surveys
我想我想通了。
在App/Providers/RouteServiceProvider文件内部,我将$namespace变量的值更改为这样的空字符串
更改了以下行
protected $namespace = 'App\Http\Controllers';
对此
protected $namespace = '';
然后在我的 routes.php 文件中,我使用了这样的命名空间
Route::group([
'namespace' => 'Modules\Vendname\Surveys\Controllers\Frontend',
], function()
{
Route::get('/survey', ['as' =>'survey.index', 'uses' => 'SurveysController@index']);
});
Run Code Online (Sandbox Code Playgroud)
我不确定为什么 Taylor 在服务提供商中硬编码了值,而不是配置中的选项,但这个解决方案似乎有效!
如果有一种动态方式来覆盖该值,我会更好。