我有一个问题,即不在邮递员中获得令牌以及以下问题
reflectionException … vendor laravel framework src inluminate container container.php790 用户控制器不存在
我的路由文件;
Route::post('login', 'APIUserController@login');
Route::post('register', 'APIUserController@register');
Route::group(['middleware' => 'auth:api'], function(){
Route::post('details', 'APIUserController@details');
});
我的控制器文件;
namespace AppHttpControllers;
use AppHttpControllersController;
use AppUser;
use IlluminateSupportFacadesAuth;
use Validator;
use IlluminateHttpRequest;
class UserController extends Controller {
//
public $successStatus = 200;
/**
* login api
*
* @return IlluminateHttpResponse
*/
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 IlluminateHttpResponse
*/
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 IlluminateHttpResponse
*/
public function details()
{
$user = Auth::user();
return response()->json(['success' => $user], $this-> successStatus);
}
}
如何解决此问题?
如果您的控制器路径为 /App/Http/Controllers/API
,则需要调整其名称空间:
namespace AppHttpControllersAPI;
如果您的控制器路径为/App/Http/Controllers
,则需要调整路线:
Route::post('login', 'UserController@login');
只需在命名空间中写入文件夹扩展名
例如,在您的情况下
namespace AppHttpControllersAPI;
,在路线上,您只写
Route::post('register','apiUserController@register');
可能是因为您没有在用户路由上调用直接指向该控制器的正确中间件。您将必须创建一个用户中间件。
您可以通过导航到您的应用程序 http 中间件来做到这一点,并将用户中间件添加到名称usermiddleware.php和一些代码中。
首先,您需要导入以下文件;
namespace AppHttpMiddleware;
use Closure;
use IlluminateSupportFacadesAuth;
然后创建一个名为;
class UserMiddleware
像这样添加一个手柄功能;
public function handle($request, Closure $next)
此功能内部包括以下代码;
if (Auth::user()->usertype == 'user') { return $next($request); }
接下来,转到您的应用程序 http kernel.php,并在 preected $ utaremiddleware procept的底部添加以下代码;
'user' => AppHttpMiddlewareUserMiddleware::class,
然后转到您的路线(API(,并将此预定义的用户中间件包含在您的URL中。
Route::group(['middleware' => 'user'], function () {
Route::post('login', 'APIUserController@login');
Route::post('register', 'APIUserController@register');
Route::post('details', 'APIUserController@details');
});
}(;
为此,您需要在用户表中拥有一个usertype
字段,该表默认设置为user
。您的使用UserType列应该看起来像
$table->string('usertype')->nullable()->default('user');
1 。复制控制器的现有功能并删除它。
2 。重新创建您的控制器,但是这次指定您要将其放置在控制器目录中的位置。例如
php工匠制造:控制器名称yoursubfolder yourcontrollersname
3 。粘贴您的功能。
laravel具有Web路由和API路由,具有不同的名称空间/路径配置,其中"类应用程序"诸如" class app http controllers api api usercontroller"之类的问题不存在。来自。
- 网络路线:
在控制器中:
<?php
namespace AppHttpControllers;
use Auth;
use AppApplication;
use IlluminateHttpRequest;
class HomeController extends Controller
{
在Web.php路由文件中:
Route::get('/home', 'HomeController@index')->name('home');
- API路线:
在控制器中:如果将API控制器放入 api路径,则应为app http controllers api。
<?php
namespace AppHttpControllersAPI;
use IlluminateHttpRequest;
use AppHttpControllersController;
class CartController extends Controller
{
在API.PHP路由文件中,将API 添加到控制器路径。
Route::get('/carts', 'APICartController@index');