![](/img/trans.png)
[英]Class App\Http\Controllers\v1\Random\UserController does not exist
[英]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.