Class App\Http\Controllers\API\UserController 不存在
Class App\Http\Controllers\API\UserController does not exist
我遇到了无法在邮递员中获取令牌的问题以及以下问题
ReflectionException
…\vendor\laravel\framework\src\Illuminate\Container\Container.php790
user controller does not exist
我的路由文件;
Route::post('login', 'API\UserController@login');
Route::post('register', 'API\UserController@register');
Route::group(['middleware' => 'auth:api'], function(){
Route::post('details', 'API\UserController@details');
});
我的控制器文件;
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;
use Validator;
use Illuminate\Http\Request;
class UserController extends Controller {
//
public $successStatus = 200;
/**
* login api
*
* @return \Illuminate\Http\Response
*/
public function login(){
if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')-> accessToken;
return response()->json(['success' => $success], $this-> successStatus);
}
else{
return response()->json(['error'=>'Unauthorised'], 401);
}
}
/**
* Register api
*
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required',
'c_password' => 'required|same:password',
]); if ($validator->fails()) {
return response()->json(['error'=>$validator->errors()], 401);
} $input = $request->all();
$input['password'] = bcrypt($input['password']);
$user = User::create($input);
$success['token'] = $user->createToken('MyApp')-> accessToken;
$success['name'] = $user->name; return response()->json(['success'=>$success], $this-> successStatus);
}
/**
* details api
*
* @return \Illuminate\Http\Response
*/
public function details()
{
$user = Auth::user();
return response()->json(['success' => $user], $this-> successStatus);
}
}
我该如何解决这个问题?
如果你的控制器路径是/App/Http/Controllers/API
,你需要调整它的命名空间:
namespace App\Http\Controllers\API;
如果你的控制器路径是/App/Http/Controllers
,你需要调整你的路由:
Route::post('login', 'UserController@login');
只需在命名空间中写入文件夹扩展即可
例如你的情况
namespace App\Http\Controllers\API;
在路由中你只需要写
Route::post('register','api\UserController@register');
可能是因为您没有在指向该控制器的用户路由上调用正确的中间件。您将必须创建一个用户中间件。
您可以通过导航到您的 App\Http\Middleware 并添加名称为 UserMiddleware.php 的用户中间件和一些代码来完成此操作。
首先,您需要导入以下文件;
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
然后你创建一个class调用; class UserMiddleware
像这样添加句柄函数; public function handle($request, Closure $next)
在这个函数中包含以下代码;
if (Auth::user()->usertype == 'user')
{
return $next($request);
}
接下来,交给你 App\Http\Kernel.php 并在 protected $routeMiddleware 的底部添加以下代码]节;
'user' => \App\Http\Middleware\UserMiddleware::class,
然后转到您的路由 (API) 并将这个预定义的用户中间件包含到您的 URL 中。
Route::group(['middleware' => 'user'], function () {
Route::post('login', 'API\UserController@login');
Route::post('register', 'API\UserController@register');
Route::post('details', 'API\UserController@details');
});
});
为此,您需要在用户 table 中有一个 usertype
字段,默认设置为 user
。您的用户类型列应如下所示;
$table->string('usertype')->nullable()->default('user');
1。复制控制器现有功能并删除它。
2。重新创建您的控制器,但这次指定您要放置它的位置,在 Controllers 目录中。例如
php artisan make:controller NameOfYourSubFolder\YourControllersName
3。粘贴你的函数。
Laravel有web路由和API路由,配置不同namespace/path,出现“Class App\Http\Controllers\API\UserController不存在”等问题来自.
- 网络路由:
在控制器中:
<?php
namespace App\Http\Controllers;
use Auth;
use App\Application;
use Illuminate\Http\Request;
class HomeController extends Controller
{
在 web.php 路由文件中:
Route::get('/home', 'HomeController@index')->name('home');
- API 路线:
在控制器中:
如果您将 API 控制器放在 \API 路径中,命名空间应该是 App\Http\Controllers\API。
<?php
namespace App\Http\Controllers\API;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class CartController extends Controller
{
在api.php路由文件中,添加API\到控制器路径。
Route::get('/carts', 'API\CartController@index');
我遇到了无法在邮递员中获取令牌的问题以及以下问题
ReflectionException …\vendor\laravel\framework\src\Illuminate\Container\Container.php790 user controller does not exist
我的路由文件;
Route::post('login', 'API\UserController@login');
Route::post('register', 'API\UserController@register');
Route::group(['middleware' => 'auth:api'], function(){
Route::post('details', 'API\UserController@details');
});
我的控制器文件;
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Support\Facades\Auth;
use Validator;
use Illuminate\Http\Request;
class UserController extends Controller {
//
public $successStatus = 200;
/**
* login api
*
* @return \Illuminate\Http\Response
*/
public function login(){
if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){
$user = Auth::user();
$success['token'] = $user->createToken('MyApp')-> accessToken;
return response()->json(['success' => $success], $this-> successStatus);
}
else{
return response()->json(['error'=>'Unauthorised'], 401);
}
}
/**
* Register api
*
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required',
'email' => 'required|email',
'password' => 'required',
'c_password' => 'required|same:password',
]); if ($validator->fails()) {
return response()->json(['error'=>$validator->errors()], 401);
} $input = $request->all();
$input['password'] = bcrypt($input['password']);
$user = User::create($input);
$success['token'] = $user->createToken('MyApp')-> accessToken;
$success['name'] = $user->name; return response()->json(['success'=>$success], $this-> successStatus);
}
/**
* details api
*
* @return \Illuminate\Http\Response
*/
public function details()
{
$user = Auth::user();
return response()->json(['success' => $user], $this-> successStatus);
}
}
我该如何解决这个问题?
如果你的控制器路径是/App/Http/Controllers/API
,你需要调整它的命名空间:
namespace App\Http\Controllers\API;
如果你的控制器路径是/App/Http/Controllers
,你需要调整你的路由:
Route::post('login', 'UserController@login');
只需在命名空间中写入文件夹扩展即可
例如你的情况
namespace App\Http\Controllers\API;
在路由中你只需要写
Route::post('register','api\UserController@register');
可能是因为您没有在指向该控制器的用户路由上调用正确的中间件。您将必须创建一个用户中间件。
您可以通过导航到您的 App\Http\Middleware 并添加名称为 UserMiddleware.php 的用户中间件和一些代码来完成此操作。
首先,您需要导入以下文件;
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
然后你创建一个class调用;
class UserMiddleware
像这样添加句柄函数;
public function handle($request, Closure $next)
在这个函数中包含以下代码;
if (Auth::user()->usertype == 'user') { return $next($request); }
接下来,交给你 App\Http\Kernel.php 并在 protected $routeMiddleware 的底部添加以下代码]节;
'user' => \App\Http\Middleware\UserMiddleware::class,
然后转到您的路由 (API) 并将这个预定义的用户中间件包含到您的 URL 中。
Route::group(['middleware' => 'user'], function () {
Route::post('login', 'API\UserController@login');
Route::post('register', 'API\UserController@register');
Route::post('details', 'API\UserController@details');
});
});
为此,您需要在用户 table 中有一个 usertype
字段,默认设置为 user
。您的用户类型列应如下所示;
$table->string('usertype')->nullable()->default('user');
1。复制控制器现有功能并删除它。
2。重新创建您的控制器,但这次指定您要放置它的位置,在 Controllers 目录中。例如
php artisan make:controller NameOfYourSubFolder\YourControllersName
3。粘贴你的函数。
Laravel有web路由和API路由,配置不同namespace/path,出现“Class App\Http\Controllers\API\UserController不存在”等问题来自.
- 网络路由:
在控制器中:
<?php
namespace App\Http\Controllers;
use Auth;
use App\Application;
use Illuminate\Http\Request;
class HomeController extends Controller
{
在 web.php 路由文件中:
Route::get('/home', 'HomeController@index')->name('home');
- API 路线:
在控制器中: 如果您将 API 控制器放在 \API 路径中,命名空间应该是 App\Http\Controllers\API。
<?php
namespace App\Http\Controllers\API;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class CartController extends Controller
{
在api.php路由文件中,添加API\到控制器路径。
Route::get('/carts', 'API\CartController@index');