我是 Laravel 的新手。为了尝试保持我的应用程序有组织,我想把我的控制器放到控制器文件夹的子文件夹中。
controllers\
---- folder1
---- folder2
我试图路由到一个控制器,但laravel找不到它。
我尝试定位到一个控制器,但是 Laravel 找不到它。
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
我做错了什么?
我是 Laravel 的新手。为了尝试保持我的应用程序有组织,我想把我的控制器放到控制器文件夹的子文件夹中。
controllers\
---- folder1
---- folder2
我试图路由到一个控制器,但laravel找不到它。
我尝试定位到一个控制器,但是 Laravel 找不到它。
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
我做错了什么?
对于 Laravel 5.3 及以上版本:
php artisan make:controller test/TestController
如果文件夹不存在,这将创建test
文件夹,然后在其中创建TestController
。
TestController
将如下所示:
<?php
namespace App\Http\Controllers\test;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class TestController extends Controller
{
public function getTest()
{
return "Yes";
}
}
你可以通过以下方式注册你的路由:
Route::get('/test','test\TestController@getTest');
将你的控制器添加到文件夹中:
controllers\
---- folder1
---- folder2
创建您的路由,不需要指定文件夹:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
运行
composer dump-autoload
请再试一次
artisan dump-autoload
,或者仅使用 composer dump-autoload
就足够了吗? - reikyoushinClassLoader::addDirectories
中有一些composer没有的东西,你也需要使用artisan。 - Antonio Carlos Ribeirocomposer dump-autoload
对我也起作用。如果你使用的是Windows操作系统,你可以使用一个.bat文件来运行composer dump-autoload
,而不是每次在CMD中输入。这就是我正在使用的:
PUSHD "E:\path\to\non-public" newline START /B "Window 1" composer dump-autoload newline pause
- vinsa对于使用 Laravel 5 的用户,您需要在子目录中设置控制器的名称空间(Laravel 5 仍处于开发阶段,每天都在发生变化)。
要获得如下的文件夹结构:
Http
----Controllers
----Admin
PostsController.php
PostsController.php
像这样,将Admin\PostsController.php文件放入命名空间中:
<?php namespace App\Http\Controller\Admin;
use App\Http\Controllers\Controller;
class PostsController extends Controller {
//business logic here
}
那么你的路线是:
$router->get('/', 'Admin\PostsController@index');
最后,别忘了执行composer或artisan dump命令
composer dump-autoload
或者php artisan dump
App\Http\Controllers\Auth\Controller
未找到,为什么会添加单词Controller
并且丢失控制器的实际名称?我认为是斜杠造成的。-o
也没有帮助。 - blamb对于 Laravel 5 或 Laravel 5.1 LTS,如果您在 Admin 文件夹中有多个控制器,则 Route::group
对您非常有帮助。例如:
更新: 可用于 Laravel 5.4
我的文件夹结构:
Http
----Controllers
----Api
----V1
PostsApiController.php
CommentsApiController.php
PostsController.php
PostAPIController:
<?php namespace App\Http\Controllers\Api\V1;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PostApiController extends Controller {
...
在我的 Route.php 中,我将 namespace
组设置为 Api\V1
,整体看起来是这样的:
Route::group(
[
'namespace' => 'Api\V1',
'prefix' => 'v1',
], function(){
Route::get('posts', ['uses'=>'PostsApiController@index']);
Route::get('posts/{id}', ['uses'=>'PostssAPIController@show']);
});
要了解有关创建子文件夹的详细信息,请访问此链接。
1. 创建您的子文件夹,就像以下示例:
app
----controllers
--------admin
--------home
2.在app/routes.php中配置您的代码。
<?php
// index
Route::get('/', 'Home\HomeController@index');
// admin/test
Route::group(
array('prefix' => 'admin'),
function() {
Route::get('test', 'Admin\IndexController@index');
}
);
?>
3.在app/controllers/admin/IndexController.php中编写内容,例如:
<?php
namespace Admin;
class IndexController extends \BaseController {
public function index()
{
return "admin.home";
}
}
?>
4. 访问你的网站,例如:localhost/admin/test 你会在页面上看到 "admin.home"。
附注:请忽略我的英文水平。
Api
:namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
api.php
中,您需要:Route::resource('/myapi', 'Api\MyController');
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/controllers/product',
app_path().'/models',
app_path().'/database/seeds',
));
php artisan make:controller admin/CategoryController
在app/Http/Controllers目录下,admin是子目录,CategoryController是您想要创建的控制器。
在创建控制器之后,我在composer.json中添加了指向新的admin目录的路径:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/controllers/admin",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php"
]
},
composer dump-autoload
php artisan dump-autoload
Route::controller('admin', 'AdminController');
一切正常运行良好。
以下是让您的应用程序有组织的方法:
每个路由文件(web.php
,api.php
...)在一个文件中声明了一个map()
方法。
\app\Providers\RouteServiceProvider.php
当你映射路由文件时,可以为其设置->namespace($this->namespace)
,你将在示例中看到它。
这意味着你可以创建更多的文件,使你的项目更加有结构!
并为每个文件设置不同的命名空间。
但我更喜欢将命名空间设置为空字符串""
2)你可以按照本机 PHP 的方式设置路由控制器,请参见以下示例:
Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
php artisan make:controller test\TestController
会创建testTestController.php
文件,而使用php artisan make:controller 'test\TestController'
(注意有引号)则可以正常工作。 - Laravel 5.4 - Giovanni Sphp artisan make:controller test/TestController
- Amrit Shrestha