Php Laravel视图中的名称空间

Php Laravel视图中的名称空间,php,laravel,namespaces,laravel-5,Php,Laravel,Namespaces,Laravel 5,我正在创建一个“模块化”的Laravel应用程序,其中相关类被分组到它们自己的目录和名称空间中,这反映了app/目录和\app名称空间的结构。服务提供商注册视图并为每个模块定义路由 此结构非常适合划分所有内容,但问题在于在视图中引用控制器。在主应用程序模块中,要基于控制器操作创建URL,我可以使用类似于{{action('MyController@index“)}因为所有内容都与\App\Http\Controllers命名空间相关。在模块视图中,我必须执行类似于{action('\Module

我正在创建一个“模块化”的Laravel应用程序,其中相关类被分组到它们自己的目录和名称空间中,这反映了
app/
目录和
\app
名称空间的结构。服务提供商注册视图并为每个模块定义路由

此结构非常适合划分所有内容,但问题在于在视图中引用控制器。在主应用程序模块中,要基于控制器操作创建URL,我可以使用类似于
{{action('MyController@index“)}
因为所有内容都与
\App\Http\Controllers
命名空间相关。在模块视图中,我必须执行类似于
{action('\Modules\MyModule\Http\Controllers)的操作\MyModuleController@index“)}
它可以工作,但是需要大量的输入和读取,如果我重命名一个模块,我需要替换它的每个实例

是否有办法使作为模块一部分加载的所有视图使用正确的命名空间?这是我的模块服务提供商的
boot()
函数中的内容:

foreach($this->modules as $module) { // Module names in CamelCase
    $this->loadViewsFrom(base_path('modules/' . $module . '/Resources/Views'), strtolower($module));
}
这使我可以引用视图,如
view('mymoduleinlowercase::folder.viewname')


在API文档中,我似乎找不到任何对
loadViewsFrom()
函数的引用。

因此,它似乎已经在使用命名路由自动执行此操作。my
ModuleServiceProvider
类的路由部分如下所示:

// $this->modules = ['Module1CamelCase', 'Module2CamelCase', ...];
foreach($this->modules as $module) {

    $routefile = base_path('modules\\' . $module . '\\Http\\routes.php');

    if(file_exists($routefile)) {

        $router->group(['namespace' => 'Modules\\' . $module . '\\Http\\Controllers', 'prefix' => strtolower($module)], function($router) use ($routefile) {
            require $routefile;
        });

    }
}
使用
modules/MyModule/Http/routes.php
看起来像:

$router->get('/', 'HomeController@index');
$router->resource('myresource', 'MyResourceController');
...
因为我在为每个模块指定路由组选项时使用了
'namespace'=>'Modules\\…
,所以我可以键入
HomeController@index
在my
routes.php
文件中,而不是
\Modules\MyModule\Http\Controllers\HomeController@index

我还在选项中使用了
'prefix'=>'mymodule'
,因此现在我有了一些不错的命名路由,比如
mymodule
for
HomeController@index
mymodule.myresource.show的
MyResourceController@show
。要创建到该文件的链接,我只需在模板文件中使用
{route('mymodule.myresource.show',$resourceid)}


我没有意识到它已经自动为我很好地命名了路线。通过从命令行运行
php artisan routes:list
,很容易看出这一点。

命名路由和使用
route('route.name')
是否是您的选择?@lukasgeiter-我觉得有点傻。事实证明,它已经基本上做到了这一点。将为有此问题的任何其他人发布答案。