繁体   English   中英

Class App\Http\Controllers\UserController 不存在

[英]Class App\Http\Controllers\UserController Does Not Exist

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

Route.php 第 280 行中的 ReflectionException:Class 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(); 部分错误消失,是否与此有关?

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

以前是:

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

现在它变成了

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

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

use App\Http\Controllers\PagesController;

替换此代码

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

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'],
]);

使用 App\\Http\\Controllers\\UserController;

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

Laravel 8 更新了路由格式。 以上路线仅适用于 laravel 8 或更高版本

如果你低于 8 的 Laravel 尝试使用

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

不要忘记将此行添加到您的 controller

use App\Http\Controllers\Controller;

如果这不存在于您的 controller 中,则您的 controller 无法扩展主要原型的功能 Laravel controller 原型

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

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

use App\Http\Controllers\Controller;

或者您可以轻松避免在控制台上输入

php artisan make:controller UserController

这将解决问题。

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

使用 App\\Http\\Controllers\\UserController;

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

固定。

Route::get('/', 'api\AppController@appInfo');

我在controller/api文件夹中创建了AppController ,所以这是我的路径。 你需要给你的控制器路径。

DOCS Laravel 8.x 控制器#resource-controllers

在文件路由/web.php

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

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

现在删除下一行的注释。

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

实际上你有 2 个错误,最后一个显示在页面顶部,那个错误是 controller 不存在。 您看到该错误的原因是因为 Model::create() 方法需要一个属性数组,而您使用单独的 arguments 调用它。

尝试:

$user = 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'],
]);

一定要正确输入use App\Http\Controllers\Controller; 因为我的错误是错误输入了use App\Http\Controller\Controller;

只是代替controllers/controller ,我错误地错过了controllers/controller末尾的s ,我输入了不正确的控制器/控制器。

这个问题的最佳解决方案是打开文件“Providers/RouteServiceProvider”并进行编辑。 但是,首先,将它添加到 RouteServiceProvider class。

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

接下来,在 boot() function 中。

$this->configureRateLimiting();

$this->routes(function () {
    Route::middleware('api')
        ->prefix('api')
        ->group(base_path('routes/api.php'));
    Route::namespace($this->namespace)
        ->middleware('web')
        ->group(base_path('routes/web.php'));
    Route::namespace($this->namespace)
        ->middleware('web')
        ->group(base_path('routes/dashboard.php'));
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM