我是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/"
}
}
我错过了什么吗?
答案 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' );
} );