如何将控制器放在laravel 5.1.3中的文件夹中?

时间:2015-07-26 14:13:29

标签: php laravel laravel-5 laravel-routing

我是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 不存在

我的autolaoder部分:

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

我错过了什么吗?

7 个答案:

答案 0 :(得分:4)

创建控制器的最佳方法是使用内置的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时,您应该看到消息:嗨那里!

我希望这有帮助!

答案 1 :(得分:2)

我不知道为什么会发生这种情况,但在我的路线中加上这个就修好了。

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

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

答案 2 :(得分:1)

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

我认为你的控制器会运行。

重命名控制器 ShowDashboardController

答案 3 :(得分:1)

php artisan make:controller Admin/ShowDashboardController

文件名应为ShowDashboardController.php

答案 4 :(得分:0)

我发布的内容并没有出错。如果您在composer.json中更改了命名空间到文件夹的映射,请确保运行'composer dump-autoload'命令。

答案 5 :(得分:0)

以下代码正常运作.. 尝试一次

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

现在, 的 ShowDashboard.php

$sql ="UPDATE `members` SET `description`='{$description[$index]}' WHERE id='1' AND fruit = 'banana'";

routes.php

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

然后在cmd上运行Route::get('admin', 'admin\ShowDashboard@init'); .. 然后运行composer update。 它说.. 你好!

答案 6 :(得分:0)

在子文件夹中创建一个新控制器,例如: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' );
} );