1. ホーム
  2. laravel-4

[解決済み] Laravel: コントローラが存在しない

2022-02-27 01:35:13

質問

app/controllers/admin/ フォルダに新しいコントローラを追加し、/app/routes.php ファイルにルートも追加しました。そして、以下のコマンドを実行して、それらを自動ロードしています。

php artisan dump-autoload

次のようなエラーが発生しました。

Mcrypt PHP extension required.

で紹介されている手順に従いました。 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}}

以下は私のコードです。 ルーティング.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');
});

以下は 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'));
    }

}

解決方法は?

composer.json ファイルに autoload classmap を追加しましたか? composer.jsonを開き、以下の項目を追加してください。

"autoload": {
        "classmap": [
            "app/controllers/admin",
        ]
    }

コントローラ内にフォルダを追加する場合は、composer.json ファイルに追加する必要があります。そして

composer dumpautoload

または代替案

app/start/global.phpに追加してください。

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