【问题标题】:Class App\Http\Controllers\UserController Does Not Exist类 App\Http\Controllers\UserController 不存在
【发布时间】:2016-09-16 05:55:58
【问题描述】:

加载路由 /users 或 /user/add 时出现问题并返回错误;

Route.php 第 280 行中的反射异常:类 App\Http\Controllers\App\Controllers\UserController 不存在

UserController 确实存在,但它不在我的控制器文件夹中的文件夹中。

我的路线文件;

Route::group(['middleware' => 'auth'], function(){
    Route::get('/route/selector', 'PagesController@selectRoute');

    // Admin Only //
    Route::group(['middleware' => 'isAdmin'], function(){
        Route::get('/admin', 'AdminController@index');

        Route::get('/users', 'UserController@index');
        Route::get('/user/add', 'UserController@getAdd');
        Route::post('/user/add', 'UserController@postAdd');
        Route::get('/user/edit/{id}', 'UserController@getEdit');
        Route::post('/user/edit/{id}', 'UserController@postEdit');
        Route::get('/user/delete/{id}', 'UserController@delete');
    });
});

我的用户控制器;

<?php

namespace App\Http\Controllers;

use App\Http\Requests;
use App\User;
use App\UserTypes;

use Auth;
use Hashids;
use Redirect;
use Request;
use Hash;

class UserController extends Controller
{
    public function index(){
        $users = User::get();
        return view('users.index', compact('users'));
    }

    public function getAdd(){
        $user_type = UserTypes::pluck('user_type', 'id');
        return view('users.add', compact('user_type'));
    }

    public function postAdd(){
        $input = Request::all();
        $password = str_random(8);
        User::create(
            'email' => $input['email'],
            'password' => Hash::make($password),
            'first_name' => $input['first_name'],
            'surname' => $input['surname'],
            'phone_number' => $input['phone_number'],
            'user_type' => $input['user_type'],
        );

        return Redirect::action('UserController@index');
    }

    public function getEdit($id){

    }

    public function postEdit($id){

    }

    public function delete($id){
        User::find(current(Hashids::decode($id)))->delete();
        return Redirect::action('UserController@index');
    }

}

当我删除 User::create();部分错误消失了,和这个有关系吗?

【问题讨论】:

  • 尝试运行composer dumpauto 命令。
  • 你的UserController的路径是什么?当您使用namespace App\Http\Controllers 时,它必须在app/Http/Controllers 目录中
  • 感谢两位,作曲家 dumpauto 没有任何区别。控制器也在 app/Http/Controllers 目录中
  • 当我删除 User::create();部分错误消失了,这与此有关吗?
  • 你错过了顶部类的使用。

标签: php laravel laravel-5.1 laravel-5.2


【解决方案1】:

Laravel 8.x 更新使用路由的方式有所不同。

以前是:

Route::get('/', 'PagesController@index');

现在改成

Route::get('/',[PagesController::class, 'index']);

注意:不要忘记在顶部的 routes(web.php) 文件中导入(使用)您的控制器。喜欢:

use App\Http\Controllers\PagesController;

【讨论】:

  • 当我将save movement 控制器文件(在refactor 选项下)添加到文件夹时发生在我身上。我做了@Maz341 所说的,但另外在 MyController 类文件中更正了命名空间,删除了 [prefix\MyController::class, '...'] 中的前缀(一个文件夹)并重新导入了控制器父级。并重新启动了服务器。现在一切正常
  • 谢谢老兄...我从 Laravel 5 回来了。很多事情都变了。
  • 就我而言,我在use App\Http\Controllers\PagesController; 中使用了小写a。只需转换为大写
【解决方案2】:

替换此代码

Route::group(['middleware' => 'isAdmin'], function(){
    Route::get('/admin', 'AdminController@index');

    Route::get('/users', 'UserController@index');
    Route::get('/user/add', 'UserController@getAdd');
    Route::post('/user/add', 'UserController@postAdd');
    Route::get('/user/edit/{id}', 'UserController@getEdit');
    Route::post('/user/edit/{id}', 'UserController@postEdit');
    Route::get('/user/delete/{id}', 'UserController@delete');
});

有了这个

Route::group(['middleware' => 'isAdmin'], function(){
    Route::get('/admin', 'AdminController@index');
    Route::group(['namespace' => YOUR_NAMESPACE], function(){
        Route::get('/users', 'UserController@index');
        Route::get('/user/add', 'UserController@getAdd');
        Route::post('/user/add', 'UserController@postAdd');
        Route::get('/user/edit/{id}', 'UserController@getEdit');
        Route::post('/user/edit/{id}', 'UserController@postEdit');
        Route::get('/user/delete/{id}', 'UserController@delete');
    });
});

& 在您的UserController 中,您还应该更正您的namespace

例如,您的UserController 位于app/Controllers 目录中,那么您的UserController 将是这样的

<?php

namespace App\Controllers;

use App\Http\Requests;
use App\User;
use App\UserTypes;

use Auth;
use Hashids;
use Redirect;
use Request;
use Hash;

class UserController extends Controller
{
    public function index(){
        $users = User::get();
        return view('users.index', compact('users'));
    }

    public function getAdd(){
        $user_type = UserTypes::pluck('user_type', 'id');
        return view('users.add', compact('user_type'));
    }

    public function postAdd(){
        $input = Request::all();
        $password = str_random(8);
        User::create(
            'email' => $input['email'],
            'password' => Hash::make($password),
            'first_name' => $input['first_name'],
            'surname' => $input['surname'],
            'phone_number' => $input['phone_number'],
            'user_type' => $input['user_type'],
        );

        return Redirect::action('UserController@index');
    }

    public function getEdit($id){

    }

    public function postEdit($id){

    }

    public function delete($id){
        User::find(current(Hashids::decode($id)))->delete();
        return Redirect::action('UserController@index');
    }

}

&你的路线会是这样的

Route::group(['middleware' => 'auth'], function(){
    Route::get('/route/selector', 'PagesController@selectRoute');

    // Admin Only //
    Route::group(['middleware' => 'isAdmin'], function(){
        Route::get('/admin', 'AdminController@index');
        Route::group(['namespace' => '\App\Controllers'], function(){
            Route::get('/users', 'UserController@index');
            Route::get('/user/add', 'UserController@getAdd');
            Route::post('/user/add', 'UserController@postAdd');
            Route::get('/user/edit/{id}', 'UserController@getEdit');
            Route::post('/user/edit/{id}', 'UserController@postEdit');
            Route::get('/user/delete/{id}', 'UserController@delete');
        });
    });
});

【讨论】:

  • 我的用户控制器位于 app/Http/Controllers 而不是 app/Controllers 这会有所不同吗?我之前构建了许多 laravel 应用程序,这从来都不是问题。
  • 当我删除 User::create();部分错误消失了,和这个有关系吗?
  • Route.php 第 280 行中的ReflectionException:App\Http\Controllers\App\Controllers\UserController 类不存在
  • @KieranHeadley 您的路由命名空间不正确。如果我看到您的route service provide 和route,那么我可以找到解决方案。对于临时,您可以使用我的路线部分解决方案并将此文本 Route::group(['namespace' =&gt; '\App\Controllers'], function(){ 替换为此 Route::group(['namespace' =&gt; '\App\Http\Controllers'], function(){
  • 我的路由命名空间在 /app/Providers/RouteServiceProvider.php 中设置为 'App\Http\Controllers'
【解决方案3】:

create 方法缺少数组括号。

User::create([
    'email' => $input['email'],
    'password' => Hash::make($password),
    'first_name' => $input['first_name'],
    'surname' => $input['surname'],
    'phone_number' => $input['phone_number'],
    'user_type' => $input['user_type'],
]);

【讨论】:

    【解决方案4】:
    use App\Http\Controllers\UserController;
    
    Route::get('/user', [UserController::class, 'index]);
    

    Laravel 8 更新了路由格式。上述路线仅适用于 Laravel 8 或更高版本。如果您的 Laravel 版本小于 8,请尝试使用:

    Route::get('/user', 'UserController@index');
    

    【讨论】:

      【解决方案5】:

      发生这种情况是因为您缺少具有扩展功能的 Controller 类,其他原因取决于您的操作。

      要解决此问题,您需要在 UserController 中使用 Controller 类。

      use App\Http\Controllers\Controller;
      

      或 你可以很容易地避免在控制台上输入

      php artisan make:controller UserController
      

      这将解决问题。

      【讨论】:

        【解决方案6】:

        Laravel 8 更新了路由格式,请在控制器路由上尝试更新格式。

        use App\Http\Controllers\UserController;
        
        Route::get('/user', [UserController::class, 'index']);
        

        固定。

        【讨论】:

          【解决方案7】:
          Route::get('/', 'api\AppController@appInfo');
          

          我在controller/api 文件夹中创建了AppController,所以这是我的路径。您需要提供路径,直到您的控制器。

          【讨论】:

            【解决方案8】:

            DOCS Laravel 8.x controllers#resource-controllers

            关于文件 routes/web.php

            use App\Http\Controllers\UserController; 然后 Route::resource('user',UserController::class);

            【讨论】:

              【解决方案9】:

              在 laravel 8 中执行以下操作 从 RouteServiceProvider.php 中删除注释 首先打开位于 app\Providers\RouteServiceProvider.php 的 RouteServiceProvider.php

              现在删除下一行的注释。

              受保护的 $namespace = 'App\Http\Controllers';

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2019-09-30
                • 2018-12-14
                • 2020-05-08
                • 2020-10-15
                • 2020-09-01
                • 2021-07-13
                • 2017-12-23
                • 2020-05-01
                相关资源
                最近更新 更多