Laravel:控制器不存在

nee*_*raj 5 controller autoload laravel-4

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

php artisan dump-autoload
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

Mcrypt PHP extension required.
Run Code Online (Sandbox Code Playgroud)

我按照https://askubuntu.com/questions/460837/mcrypt-extension-is-missing-in-14-04-server-for-mysql上的说明进行操作,并且能够解决mcrypt问题.

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

{"error":{"type":"ReflectionException","message":"Class CoursesController does not exist","file":"\/var\/www\/html\/vendor\/laravel\/framework\/src\/Illuminate\/Container\/Container.php","line":504}}
Run Code Online (Sandbox Code Playgroud)

这是我的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');
});
Run Code Online (Sandbox Code Playgroud)

这是CoursesController.php文件的代码

<?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'));
    }

}
Run Code Online (Sandbox Code Playgroud)

Aks*_* kn 13

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

在你的路线中;

use App\Http\Controllers\AuthController;
Route::post('/login', [AuthController::class, 'login']);
Run Code Online (Sandbox Code Playgroud)

文档 = https://laravel.com/docs/8.x/routing#the-default-route-files


Sus*_*yal 12

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

"autoload": {
        "classmap": [
            "app/controllers/admin",
        ]
    }
Run Code Online (Sandbox Code Playgroud)

如果在控制器中添加文件夹,则需要将其添加到composer.json文件中.然后跑

composer dumpautoload
Run Code Online (Sandbox Code Playgroud)

或替代

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

ClassLoader::addDirectories(array(
    app_path().'/controllers/admin',
));
Run Code Online (Sandbox Code Playgroud)

  • @anunixercoder 这个解决方案适用于 Laravel 4。由于版本 4 没有使用 psr 自动加载,为了反映在composer.json中所做的更改,您必须运行“composer dumpautoload”。正如您在上面看到的,我们已将管理目录添加到控制器中。或者,如果您不想运行“composer dumpautoload”,则可以使用替代解决方案。如果您使用 5 以上的任何版本,您可以在控制器内添加任意数量的目录,只要您正确命名它即可。 (2认同)

rot*_*g05 7

就我而言,我必须更改路由文件:

Route::get('/','SessionController@accessSessionData');
Run Code Online (Sandbox Code Playgroud)

对此:

Route::get('/','App\Http\Controllers\SessionController@accessSessionData');
Run Code Online (Sandbox Code Playgroud)

然后用以下命令清除缓存:

php artisan route:clear
Run Code Online (Sandbox Code Playgroud)

使事情顺利进行。


Bal*_*ian 6

我们需要通过命令行创建控制器。

php artisan make:controller nameController --plain

在Laravel 5之前,make名称空间不可用。相反,这有效

php artisan controller:make nameController

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


leo*_*leo 5

不要忘记做:

php artisan route:clear

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


Bai*_*ong 5

就我而言,在控制器代码的顶部,我添加以下行:

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

我的问题解决了

  • 这就是原因!通常在您将控制器类移动到目录中并忘记更改命名空间后发生。谢谢你!:) (3认同)

Cen*_*ael 5

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

protected $namespace = 'App\Http\Controllers';
Run Code Online (Sandbox Code Playgroud)