【问题标题】:How to put controller inside folder in laravel 5.1.3?如何将控制器放在 laravel 5.1.3 的文件夹中?
【发布时间】:2015-10-16 17:53:29
【问题描述】:

我是 laravel 的新手。我正在尝试通过将控制器放在文件夹中来组织控制器,但它似乎不起作用。

我的文件夹结构是这样的:

/app
    /Http
        /Controllers
            /Admin
                ShowDashboard.php

我的ShowDashboard.php文件是这样的:

<?php namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;

class ShowDashboard extends Controller {

    /**
     * Show the profile for the given user.
     *
     * @param  int  $id
     * @return Response
     */
    public function init()
    {
        return 'Hi there!';
    }

}

我的路线是这样的

Route::get('/admin', 'Admin\ShowDashboard@init');

当我试图访问 http://localhost:8000/admin 时,我收到以下错误:

App\Http\Controllers\Admin\ShowDashboard不存在

我的自动加载器部分:

"autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    }

我错过了什么吗?

【问题讨论】:

  • 您的文件夹结构中缺少“App”文件夹 - 这是误操作吗?如果结构中确实缺少它可能是原因
  • 有没有我没有提到的应用,让我更正一下。
  • 我复制了你的代码,它可以工作,不知道你得到错误的原因是什么
  • 我使用 php artisan server 作为我的服务器,会不会有问题?
  • 我不这么认为。我可以在您的文件夹结构中看到“App”,但名称应该是小写的“app” - 我想这只是一个错字。还要检查 composer.json 中的自动加载部分 - 你应该在 'App\\' 命名空间和 'app/' 文件夹之间有一个映射

标签: php laravel laravel-5 laravel-routing


【解决方案1】:

创建控制器的最佳方法是使用内置的 Laravel 实用程序 Artisan。在命令提示符下,浏览到您的 laravel 项目所在的目录。例如:c:\development\htdocs\www.example.dev

在提示符下,输入:php artisan make:controller admin/showDashboard --plain

这将在您的控制器下的管理目录中生成一个名为 showDashboard.php 的文件。该文件将默认包含以下代码:

<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class showDashboard extends Controller
{
    //
}

现在您已经创建了控制器,为 init 添加一个方法:

public function init()
{
    return 'Hi there!';
}

您的控制器现在将如下所示:

<?php

namespace App\Http\Controllers\admin;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class showDashboard extends Controller
{
    public function init()
    {
        return 'Hi there!';
    }
}

现在,在您的 routes.php 中设置您的路线,如下所示:

route::get('admin', 'admin\showDashboard@init');

保存您的工作,然后启动您的页面。浏览到 www.example.dev/admin 时,您应该会看到以下消息:您好!

我希望这会有所帮助!

【讨论】:

  • 我有完全相同的,但没有工作。投票指出创建路线的最佳方式。:)
【解决方案2】:

我不知道为什么会这样,但是在我的路线中添加它可以解决问题。

Route::group(['namespace' => 'Admin'], function()
{
    // Controllers Within The "App\Http\Controllers\Admin" Namespace

   Route::get('/admin','ShowAdminDashboard@index');
});

【讨论】:

    【解决方案3】:

    一切都已经解释过了,但可以再试一次 将controller 后缀添加到showDashboard 并运行composer dump-autoload

    我想你的控制器会运行。

    重命名您的控制器 ShowDashboardController

    【讨论】:

      【解决方案4】:
      php artisan make:controller Admin/ShowDashboardController
      

      文件名应为ShowDashboardController.php

      【讨论】:

        【解决方案5】:

        我认为您发布的内容没有任何问题。如果您在 composer.json 中更改了命名空间到文件夹的映射,请确保您运行了“composer dump-autoload”命令。

        【讨论】:

        • 我没有对composer.json做任何改动
        【解决方案6】:

        以下代码正在运行.. 尝试一次

        在文件夹 admin 中创建了一个文件 ShowDashboard.php,例如 app/http/controller

        现在, ShowDashboard.php

        <?php 
        namespace App\Http\Controllers\admin;
        
        use App\Http\Controllers\Controller;
        
        class ShowDashboard extends Controller {
           public function init()
            {
                return 'Hi there!';
            }
        
        }
        

        routes.php

        中添加了Route::get('admin', 'admin\ShowDashboard@init');

        然后在 cmd 上运行composer update.. 然后运行 ​​http://localhost:8000/admin 。 它说.. 你好!

        【讨论】:

          【解决方案7】:

          在子文件夹中新建一个控制器,例如:app/Http/Controllers/User/UserController.php

          在此控制器中,namespace 的末尾必须包含文件夹名称

          像这样:namespace App\Http\Controllers\User;

          重要的是命名空间下必须写use App\Http\Controllers\Controller;

          终于在 routes.php Route::get ( '/user', 'User\UserController@login' );

          UserController.php 内容:

          <?php
          namespace App\Http\Controllers\User;
          use App\Http\Controllers\Controller;
          class UserController extends Controller {
              public function login() {
                  return 'this login';
              }
          }
          

          routes.php 内容:

          Route::get ( '/user/login', 'User\UserController@login' );
          
          // or use this
          Route::group ( [
                  'namespace' => 'User'
          ], function () {
              Route::get ( '/user/login', 'UserController@login' );
          } );
          

          【讨论】:

            猜你喜欢
            • 2015-05-22
            • 1970-01-01
            • 1970-01-01
            • 2015-05-31
            • 2021-08-25
            • 1970-01-01
            • 2017-07-01
            • 2014-11-24
            • 1970-01-01
            相关资源
            最近更新 更多