Laravel 控制器子文件夹路由

10 浏览
0 Comments

Laravel 控制器子文件夹路由

我对Laravel还不熟悉。为了保持我的应用程序有组织性,我想将我的控制器放在控制器文件夹的子文件夹中。\n

controllers\
---- folder1
---- folder2

\n我尝试去路由到一个控制器,但是laravel找不到它。\n

Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');

\n我做错了什么?

0
0 Comments

问题出现的原因是在Laravel 5中,当控制器位于子目录中时,需要设置控制器的命名空间。解决方法是在子目录的控制器文件中设置命名空间,并在路由中指定控制器的命名空间。最后,需要执行composer dump-autoload或php artisan dump来更新自动加载。

在Laravel 5中,控制器的命名空间需要设置正确,以便能够正确找到控制器。在控制器文件中,通过namespace关键字指定命名空间,例如在Admin\PostsController.php文件中添加namespace Admin\PostsController。

在路由中,通过指定完整的控制器命名空间来指定控制器,例如$router->get('/', 'Admin\PostsController')。

最后,需要执行composer dump-autoload或php artisan dump命令来更新自动加载,以确保能够正确找到控制器。

需要注意的是,Laravel 5仍处于开发中,可能会有变化,所以以上解决方法适用于截至2015年1月23日的版本。

0
0 Comments

Laravel Controller Subfolder routing问题的出现原因是在使用Laravel框架时,将控制器(controllers)放置在不同的子文件夹中,然后在路由(route)中没有指定文件夹。这可能导致Laravel无法正确加载控制器。

解决方法是通过在composer命令中运行`composer dump-autoload`重新加载自动加载文件。如果在`ClassLoader::addDirectories`中有一些在composer中没有的内容,还需要使用`artisan dump-autoload`命令。

另外,还可以在Windows操作系统上创建一个批处理文件来自动运行`composer dump-autoload`,以避免每次都在命令提示符中输入。批处理文件的内容可以如下所示:

PUSHD "E:\path\to\non-public" 
START /B "Window 1" composer dump-autoload 
pause

如果在文件夹1和文件夹2中有两个同名的控制器(例如admin/PostsController.php和frontend/PostsController.php),需要在路由中指定文件夹,即`folder1/PostsController`和`folder2/PostsController`。

对于某些情况下仍然无法解决问题的情况,可能是因为Auth文件夹是一个特殊的文件夹。在这种情况下,需要在web.php中指定子文件夹,例如`Controllers/Auth/PostsController`。

相比于Symfony框架,Laravel在这种情况下具有更大的优势,因为Laravel无需额外的配置文件就可以灵活地处理控制器的加载和依赖关系。而Symfony则需要在每个控制器和依赖项的构造函数或路由函数本身中进行配置,导致配置文件冗长。感谢Laravel的零配置设计,使其体系结构更加合理。

0
0 Comments

Laravel Controller Subfolder routing的问题是在Laravel 4.2版本中,使用php artisan make:controller test\TestController命令创建控制器时会出现问题,生成的文件名会变为testTestController.php,而不是期望的test\TestController。下面将介绍该问题的原因以及解决方法。

问题的原因是因为在Laravel 4.2版本中,控制器的命名空间和文件路径是直接相关的。在创建控制器时,命令行中使用的反斜杠(\)在文件名中被解释为目录分隔符,而不是作为文件名的一部分。因此,当使用php artisan make:controller test\TestController命令时,Laravel会认为test\TestController是一个子目录,并在该目录下创建名为testTestController.php的文件。

解决这个问题的方法是在命令行中使用引号将控制器的命名空间包裹起来,例如php artisan make:controller 'test\TestController'。通过使用引号,Laravel将会正确解释命名空间,并在test文件夹下创建名为TestController.php的文件。

在Laravel 5.3及以上版本中,已经修复了这个问题,在创建控制器时可以直接使用php artisan make:controller test/TestController命令,不再需要使用引号。

,Laravel 4.2版本中使用php artisan make:controller test\TestController命令创建控制器时会出现文件名错误的问题,解决方法是使用引号将命名空间包裹起来,例如php artisan make:controller 'test\TestController'。而在Laravel 5.3及以上版本中,已经修复了这个问题,可以直接使用php artisan make:controller test/TestController命令进行控制器的创建。

0