【问题标题】:Class App\Http\Controllers\API\UserController does not exist类 App\Http\Controllers\API\UserController 不存在
【发布时间】:2019-09-30 06:27:06
【问题描述】:

我遇到邮递员收不到token的问题以及以下问题

反射异常 …\vendor\laravel\framework\src\Illuminate\Container\Container.php790 用户控制器不存在

我的路线文件;

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

我该如何解决这个问题?

【问题讨论】:

    标签: laravel-5 oauth oauth-2.0 passport.js passport-google-oauth


    【解决方案1】:

    如果你的控制器路径是/App/Http/Controllers/API,你需要调整它的命名空间:

    namespace App\Http\Controllers\API;
    

    如果你的控制器路径是/App/Http/Controllers,你需要调整你的路由:

    Route::post('login', 'UserController@login');
    

    【讨论】:

    • 请注意,在您提供的代码中,路由指向“App\Http\Controllers\API\UserController”,但您的控制器被定义到“App\Http\Controllers”命名空间中:- )
    【解决方案2】:

    只需在命名空间中写入文件夹扩展名

    例如你的情况

    namespace App\Http\Controllers\API;

    在路线上你只需要写

    Route::post('register','api\UserController@register');
    

    【讨论】:

      【解决方案3】:

      这可能是因为您没有在指向该控制器的用户路由上调用正确的中间件。您必须创建一个用户中间件。

      您可以通过导航到您的 App\Http\Middleware 并添加名称为 UserMiddleware.php 的用户中间件和一些代码来完成此操作。

      首先,您需要导入以下文件;

      namespace App\Http\Middleware;
      
      use Closure;
      
      use Illuminate\Support\Facades\Auth;
      
      • 然后你创建一个类叫做; 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'); 
      
      });
      

      });

      为此,您需要在您的用户表中有一个usertype 字段,默认情况下设置为user。您的用户类型列应如下所示;

          $table->string('usertype')->nullable()->default('user');
      

      【讨论】:

        【解决方案4】:

        1。复制控制器的现有功能并将其删除。

        2。重新创建您的控制器,但这次指定您想要放置它的位置,在 Controllers 目录中。例如

        php artisan make:controller NameOfYourSubFolder\YourControllersName

        3。粘贴你的函数。

        【讨论】:

          【解决方案5】:

          Laravel 有 web 路由和 API 路由,命名空间/路径配置不同,出现“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'); 
          

          【讨论】:

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