Laravel Controller子文件夹路由

时间:2013-09-17 12:57:50

标签: laravel laravel-4 laravel-routing

我是Laravel的新手。为了尝试保持我的应用程序有条理,我想将我的控制器放入控制器文件夹的子文件夹中。

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

我试图路由到控制器,但laravel找不到它。

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

我做错了什么?

15 个答案:

答案 0 :(得分:75)

对于上面的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');

答案 1 :(得分:67)

在您的文件夹中添加您的控制器:

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

创建未指定文件夹的路线:

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

运行

composer dump-autoload

再试一次

答案 2 :(得分:48)

对于使用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

答案 3 :(得分:9)

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:请忽略我糟糕的英语

答案 4 :(得分:7)

对于** Laravel 5或Laravel 5.1 LTS **,如果您在Admin文件夹中有多个控制器,CollapsingTitleLayout将对您有所帮助。例如:

更新:适用于Laravel 5.4

我的文件夹结构:

Route::group

PostAPIController:

Http
----Controllers
    ----Api
          ----V1
                 PostsApiController.php
                 CommentsApiController.php
    PostsController.php

在我的Route.php中,我将<?php namespace App\Http\Controllers\Api\V1; use App\Http\Requests; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class PostApiController extends Controller { ... 组设为namespace,整体看起来像:

Api\V1

有关创建子文件夹的移动详细信息,请访问此link

答案 5 :(得分:6)

刚刚找到了解决方法:

只需将路径添加到/app/start/global.php

即可
ClassLoader::addDirectories(array(

    app_path().'/commands',
    app_path().'/controllers',
    app_path().'/controllers/product',
    app_path().'/models',
    app_path().'/database/seeds',

));

答案 6 :(得分:6)

php artisan make:controller admin/CategoryController

下面 admin是app / Http / Controllers下的子目录 CategoryController是您要在目录

中创建的控制器

答案 7 :(得分:5)

我使用的是Laravel 4.2。我在这里怎么做:
我有一个像这样的目录结构:
应用
--controllers
----管理
------ 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');

一切正常。

答案 8 :(得分:4)

如果你正在使用Laravel 5.3或更高版本,那么就像其他答案所说的那样,没有必要进入如此多的复杂性。 只需使用default artisan命令即可生成新控制器。 例如,如果我想在User文件夹中创建User控制器。 我会输入

php artisan make:controller User/User

在路线中,

Route::get('/dashboard', 'User\User@dashboard');

这样做会很好,现在在localhost / dashboard上就是页面所在的位置。

希望这有帮助。

答案 9 :(得分:3)

在Laravel 5.6中,假设子文件夹的名称为Api

在你的控制器中,你需要这两行:

namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;

在您的路线文件api.php中,您需要:

Route::resource('/myapi', 'Api\MyController');

答案 10 :(得分:2)

我认为将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');
});

对于Admin部分,它看起来像

/* 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']);                                   
    });
});

希望这会有所帮助!!

答案 11 :(得分:0)

这就是使应用程序井井有条的方法:

每个路由文件(outerThis = this; Rails.ajax({ url: '/update-settings', type: 'POST', data: data, dataType: 'json', success: (data) => { ShopifyApp.flashNotice('Successfully updated') var settings = $('#setting').data('setting') settings.discount_type = outerThis.discountType }, error: (err) => { ShopifyApp.flashError('There was an error') } }) web.php ...)在文件中的api.php方法中声明

map()

映射路由文件时,可以为其设置\app\Providers\RouteServiceProvider.php ,您将在示例中看到它。

这意味着您可以创建更多文件来使您的项目更加结构化!

并为它们各自设置不同的名称空间。

但是我更喜欢为命名空间->namespace($this->namespace)设置empty string

它使您可以将控制器设置为以本机php方式崩溃,请参见示例:

""

现在,您可以在IDE中双击您的控制器名称,以快速,方便地到达那里。

答案 12 :(得分:0)

我最近在laravel 5.8中遇到了这个问题,但是我没理解我应该以如下所示的正确方式定义控制器:

php artisan make:controller SubFolder\MyController  // true

不是这样的:

php artisan make:controller SubFolder/MyController  // false

然后您可以像下面这样在route / web.php中访问控制器:

Route::get('/my', 'SubFolder\MyController@index');

答案 13 :(得分:0)

在我的情况下,必须为组中的每个路由添加一个前缀,否则响应将是找不到UserController类。

Route::prefix('/user')->group(function() {
    Route::post('/login', [UserController::class, 'login'])->prefix('/user');
    Route::post('/register', [UserController::class, 'register'])->prefix('/user');
});

答案 14 :(得分:-1)

创建控制器转到cmd和类型 php artisan make:controller auth\LoginController