Laravel 4 Laravel:控制器不存在

Laravel 4 Laravel:控制器不存在,laravel-4,controller,autoload,Laravel 4,Controller,Autoload,我在/app/controllers/admin/文件夹中添加了新控制器,并在/app/routes.php文件中添加了路由。然后我运行以下命令自动加载它们 php artisan dump-autoload 我犯了以下错误 Mcrypt PHP extension required. {"error":{"type":"ReflectionException","message":"Class CoursesController does not exist","file":"\/var\

我在/app/controllers/admin/文件夹中添加了新控制器,并在/app/routes.php文件中添加了路由。然后我运行以下命令自动加载它们

php artisan dump-autoload
我犯了以下错误

Mcrypt PHP extension required.
{"error":{"type":"ReflectionException","message":"Class CoursesController does not exist","file":"\/var\/www\/html\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/Container.php","line":504}}
我遵照在上给出的指示,并能够解决mcrypt问题

之后,我运行了
php artisan dump autoload
命令,但仍然出现以下错误

Mcrypt PHP extension required.
{"error":{"type":"ReflectionException","message":"Class CoursesController does not exist","file":"\/var\/www\/html\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/Container.php","line":504}}
下面是我的routes.php文件的代码

Route::group(array('before' => 'adminauth', 'except' => array('/admin/login', '/admin/logout')), function() {
    Route::resource('/admin/courses', 'CoursesController');
    Route::resource('/admin/teachers', 'TeachersController');    
    Route::resource('/admin/subjects', 'SubjectsController');
});
<?php

class CoursesController extends BaseController
{

    public function index()
    {
        $courses = Course::where('is_deleted', 0)->get();
        return View::make('admin.courses.index', compact('courses'));
    }

    public function create()
    {
        return View::make('admin.courses.create');
    }

   public function store()
    {
        $validator = Validator::make($data = Input::all(), Course::$rules);

        if ($validator->fails()) {
            $messages = $validator->messages();
            $response = '';
            foreach ($messages->all(':message') as $message) {
                $response = $message;
            }
            return Response::json(array('message'=>$response, 'status'=>'failure'));
        } else {
            Course::create($data);
            return Response::json(array('message'=>'Course created successfully','status'=>'success'));
        }
    }

    public function edit($id)
    {
        $course = Course::find($id);
        return View::make('admin.courses.edit', compact('course'));
    }

    public function update($id)
    {
        $course = Course::findOrFail($id);
        $validator = Validator::make($data = Input::all(), Course::editRules($id));

        if ($validator->fails()) {
            $messages = $validator->messages();
            $response = '';
            foreach ($messages->all(':message') as $message) {
                $response = $message;
            }
            return Response::json(array('message'=>$response, 'status'=>'failure'));
        } else {
            $course->update($data);
            return Response::json(array('message'=>'Course updated successfully','status'=>'success'));
        }
    }

    public function destroy($id)
    {
        Course::findOrFail($id)->update(array('is_deleted' => '1'));
        return Response::json(array('message'=>'Course deleted successfully','status'=>'success'));
    }

}
下面是coursecontroller.php文件的代码

Route::group(array('before' => 'adminauth', 'except' => array('/admin/login', '/admin/logout')), function() {
    Route::resource('/admin/courses', 'CoursesController');
    Route::resource('/admin/teachers', 'TeachersController');    
    Route::resource('/admin/subjects', 'SubjectsController');
});
<?php

class CoursesController extends BaseController
{

    public function index()
    {
        $courses = Course::where('is_deleted', 0)->get();
        return View::make('admin.courses.index', compact('courses'));
    }

    public function create()
    {
        return View::make('admin.courses.create');
    }

   public function store()
    {
        $validator = Validator::make($data = Input::all(), Course::$rules);

        if ($validator->fails()) {
            $messages = $validator->messages();
            $response = '';
            foreach ($messages->all(':message') as $message) {
                $response = $message;
            }
            return Response::json(array('message'=>$response, 'status'=>'failure'));
        } else {
            Course::create($data);
            return Response::json(array('message'=>'Course created successfully','status'=>'success'));
        }
    }

    public function edit($id)
    {
        $course = Course::find($id);
        return View::make('admin.courses.edit', compact('course'));
    }

    public function update($id)
    {
        $course = Course::findOrFail($id);
        $validator = Validator::make($data = Input::all(), Course::editRules($id));

        if ($validator->fails()) {
            $messages = $validator->messages();
            $response = '';
            foreach ($messages->all(':message') as $message) {
                $response = $message;
            }
            return Response::json(array('message'=>$response, 'status'=>'failure'));
        } else {
            $course->update($data);
            return Response::json(array('message'=>'Course updated successfully','status'=>'success'));
        }
    }

    public function destroy($id)
    {
        Course::findOrFail($id)->update(array('is_deleted' => '1'));
        return Response::json(array('message'=>'Course deleted successfully','status'=>'success'));
    }

}

您是否将自动加载类映射添加到composer.json文件?
打开composer.json文件并添加

"autoload": {
        "classmap": [
            "app/controllers/admin",
        ]
    }
如果在控制器中添加文件夹,则需要将其添加到composer.json文件中。然后跑

composer dumpautoload
或备选方案

转到app/start/global.php并添加

ClassLoader::addDirectories(array(
    app_path().'/controllers/admin',
));

我们可以通过命令行创建控制器

php artisan make:controller name控制器--plain

在Laravel 5之前,make命名空间不可用。相反,这是可行的

php artisan控制器:制作nameController


在项目目录中执行命令,然后创建函数。

我想您的问题已经解决了。但这就是我们所做的

结构

Http
  .Auth
  .CustomControllerFolder
    -> CustomController.php
让它工作起来 在路由文件中,确保使用正确的名称空间 例如:

另外,不要忘记在控制器中使用
名称空间App\Http\Controllers\CustomControllerFolder

这应该可以解决问题


谢谢

有时我们缺少
名称空间应用程序\Http\Controllers位于控制器代码之上。

我刚刚遇到这个问题,因为我将一个文件从
EmployeeRequestContoller
重命名为
EmployeeRequestsContoller
,但当我重命名它时,我错过了
.php
扩展名

当我重新运行php-artisan-make:controller-employeerequestscontoler
以确保我没有发疯,文件出现时,我可以清楚地看到错误:

/EmployeeRequestsContoller
/EmployeeRequestsContoller.php
如果已重命名,请确保您拥有扩展名

别忘了做:

php工匠路线:清除


在我的情况下,当我在更改路线代码后出现此错误时,这就是解决方案。

在我的情况下,我在控制器代码的顶部添加以下行:

命名空间App\Http\Controllers\CustomFolder\ControllerClassName


我的问题解决了

在我的例子中,我有几个管理员和家庭控制器的备份文件,它们的重命名日期不同,我们在上面运行了一个composer更新,它给了我们一个错误

在我删除其他较旧的控制器文件并重新运行composer更新后,修复了我的问题


 - Clue - composer update command gave us a warning.

生成优化的自动加载文件

Warning: Ambiguous class resolution, "App\Http\Controllers\HomeController" was found in both "app/core/app/Http/Controllers/HomeController(25-OCT).php" and "app/core/app/Http/Controllers/HomeController.php", the first will be used.

Warning: Ambiguous class resolution, "App\Http\Controllers\AdminController" was found in both "app/core/app/Http/Controllers/AdminController(25-OCT).php" and "app/core/app/Http/Controllers/AdminController.php", the first will be used.

在我的情况下,我必须从以下位置更改路由文件:

Route::get('/','SessionController@accessSessionData');
为此:

Route::get('/','App\Http\Controllers\SessionController@accessSessionData');
然后使用以下命令清除缓存:

php artisan route:clear
让事情顺利进行。

2021年答案(Laravel 8.5)

在控制器中

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;

class AuthController extends Controller
{
    public function login(Request $request){
        return "login";
    }
}
在你的路线上

use App\Http\Controllers\AuthController;
Route::post('/login', [AuthController::class, 'login']);

Doc=

有点晚,但根据我的经验,将其添加到RouteServiceProvider.php中可以解决问题

protected $namespace = 'App\Http\Controllers';

你可以发布CourseController中的代码吗?phpI已经添加了代码。此问题属于我们的暂存服务器,但在我的本地系统中工作正常问题是管理文件夹的其他控制器工作正常,但只有此控制器不工作尝试以下操作:extends\BaseControllerIt通过在global.php中添加管理文件夹来工作,但我的问题是为什么它对其他新添加的控制器工作?“composer dumpautload”应该已经工作,或者您需要“composer更新”“。有时我清除app/storage/views文件夹,它就会工作。@anunixercoder此解决方案适用于Laravel 4。由于版本4没有使用psr自动加载,为了反映composer.json中所做的更改,您必须运行
composer dumpautoload
。正如您在上面看到的,我们已经将admin目录添加到控制器中。如果不想运行
composer dumpautoload
,也可以使用替代解决方案。如果您使用的是5以上的任何版本,您可以在控制器中添加任意数量的目录,只要您正确命名它。这就是原因!通常在将控制器类移动到目录中并忘记更改名称空间后发生。谢谢!:)“需要”是一个强有力的词。make artisan命令只不过是方便的方法,您不需要使用它们