我是Laravel的新手。为了使我的应用程序井井有条,我想将控制器放入控制器文件夹的子文件夹中。
controllers\
---- folder1
---- folder2
我试图路由到控制器,但laravel找不到。
Route::get('/product/dashboard', 'folder1.MakeDashboardController@showDashboard');
我究竟做错了什么?
Answers:
对于上述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');
php artisan make:controller test\TestController
创建testTestController.php而php artisan make:controller 'test\TestController'
工作。(请注意引号)-Laravel 5.4
php artisan make:controller test/TestController
将控制器添加到文件夹中:
controllers\
---- folder1
---- folder2
创建未指定文件夹的路由:
Route::get('/product/dashboard', 'MakeDashboardController@showDashboard');
跑
composer dump-autoload
然后再试一次
artisan dump-autoload
还是composer dump-autoload
足够?
ClassLoader::addDirectories
没有作曲家的东西,那么您也将需要工匠。
composer dump-autoload
也为我工作。如果使用Windows操作系统,则可以使用.bat文件来运行,composer dump-autoload
而不必每次都键入CMD。这就是我正在使用的: PUSHD "E:\path\to\non-public" newline START /B "Window 1" composer dump-autoload newline pause
对于使用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 dump-autoload
要么
php artisan dump
App\Http\Controllers\Auth\Controller
找不到”,为什么将单词附加Controller
在其中,并丢失控制器的实际名称?我认为这就是斜线。 -o
没有帮助。
对于** Laravel 5或Laravel 5.1 LTS **,如果您在Admin文件夹中有多个Controller, 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 {
...
在My Route.php中,我将namespace
group 设置为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”
ps:请忽略我的英语不好
刚刚找到了一种方法:
只需将路径添加到/app/start/global.php
ClassLoader::addDirectories(array(
app_path().'/commands',
app_path().'/controllers',
app_path().'/controllers/product',
app_path().'/models',
app_path().'/database/seeds',
));
我正在使用Laravel 4.2。这是我的操作方式:
我有一个像这样的目录结构:
app
--controllers
---- admin
------ AdminController.php
创建控制器后,将composer.json放入新管理目录的路径:
"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
然后在routes.php中,我包括了这样的控制器:
Route::controller('admin', 'AdminController');
而且一切正常。
1)这样可以使您的应用程序井井有条:
每个路由文件(web.php
,api.php
...)在map()
方法中,在文件中声明
\app\Providers\RouteServiceProvider.php
映射路由文件时,您可以设置一个 ->namespace($this->namespace)
为其,您将在示例中看到它。
这意味着您可以创建更多文件来使您的项目更加结构化!
并为它们分别设置不同的名称空间。
但我更喜欢设置 empty string
为命名空间""
2)您可以将控制器设置为以本地php方式崩溃,请参见示例:
Route::resource('/users', UserController::class);
Route::get('/agents', [AgentController::class, 'list'])->name('agents.list');
现在,您可以在IDE中双击您的控制器名称,以快速方便地到达那里。
如果您使用的是Laravel 5.3或更高版本,则无需像其他答案所说的那样陷入如此复杂的境地。只需使用默认artisan命令即可生成新的控制器。例如,如果我想User
在User
文件夹中创建一个控制器。我会输入
php artisan make:controller User/User
在路线上
Route::get('/dashboard', 'User\User@dashboard');
这样做就可以了,现在页面位于localhost / dashboard上。
希望这可以帮助。
我认为将Admin和Front的控制器保留在单独的文件夹中,名称空间将运行良好。
请查看下面的Laravel目录结构,该结构对我来说很好。
app
--Http
----Controllers
------Admin
--------DashboardController.php
------Front
--------HomeController.php
“ routes / web.php”文件中的路由如下
/* All the Front-end controllers routes will work under Front namespace */
Route::group(['namespace' => 'Front'], function () {
Route::get('/home', 'HomeController@index');
});
对于“管理员”部分,它看起来像
/* All the admin routes will go under Admin namespace */
/* All the admin routes will required authentication,
so an middleware auth also applied in admin namespace */
Route::group(['namespace' => 'Admin'], function () {
Route::group(['middleware' => ['auth']], function() {
Route::get('/', ['as' => 'home', 'uses' => 'DashboardController@index']);
});
});
希望这可以帮助!!