Класс модели не найден в разделе Освещение \ Фонд \ Автор \ Поставщик - PullRequest
0 голосов
/ 20 октября 2019

Я новичок в laravel. Я создал проект и создал таблицу как

php artisan make:migration create_vendors_table

Затем я создал модель как

php artisan make:model Vendor

Я изменил свою таблицу и выполнил миграцию. Таблицы успешно созданы в MySQL. Но когда я пытался нажать http://localhost:8000/api/v1/register, у меня возникают следующие проблемы:

Symfony\Component\Debug\Exception\FatalErrorException: Class 'Illuminate\Foundation\Auth\Vendor' not found in file /Users/sandeeparmal/clients/ForCity/code/webservices/php_api/forcity_web_api/app/Vendor.php on line 8   

Я пытался найти файл Vendors в Illuminate\Foundation\Auth\, но он там недоступен.

Вот мой Vendor.php

<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\Vendor as Authenticatable;
use Laravel\Passport\HasApiTokens;

class Vendor extends Authenticatable
{
    use Notifiable;
    use HasApiTokens;

    protected $guard = 'vendors';
    protected $hidden = [
        'password', 'api_key',
    ];
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];
}    

Вот мой auth.php

'defaults' => [
        'guard' => 'web',
        'passwords' => 'vendors',
    ],
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'vendors',
        ],

        'api' => [
            'driver' => 'passport', 
            'provider' => 'vendors',
        ],
    ],
    'providers' => [
        'vendors' => [
            'driver' => 'eloquent',
            'model' => App\Vendor::class,
        ],
    ],

Вот мой AuthController.php

    <?php

namespace App\Http\Controllers\Api;
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use App\Vendor; 
use Illuminate\Support\Facades\Auth; 
use Validator;
class AuthController extends Controller 
{
 public $successStatus = 200;

 public function register(Request $request) {    
    $validator = Validator::make($request->all(), [ 
              'name' => 'required',
              'email' => 'required|email',
              'password' => 'required',  
              'number' => 'required', 
    ]);   
    if ($validator->fails()) {          
        return response()->json(['error'=>$validator->errors()], 401);                        
    } 

    $input = $request->all();  
    $input['password'] = bcrypt($input['password']);
    $vendor = Vendor::create($input); 
    $success['token'] =  $vendor->createToken('AppName')->accessToken;
    return response()->json(['success'=>$success], $this->successStatus); 
}


public function login(){ 
    if(Auth::attempt(['email' => request('email'), 'password' => request('password')])){ 
    $vendor = Auth::vendor(); 
    $success['token'] =  $vendor->createToken('AppName')-> accessToken; 
        return response()->json(['success' => $success], $this-> successStatus); 
    } else{ 
        return response()->json(['error'=>'Unauthorised'], 401); 
    } 
}

public function getVendor() {
    $vendor = Auth::vendor();
    return response()->json(['success' => $vendor], $this->successStatus); 
 }
} 

Я тоже пробовал composer dump-autoload

Ответы [ 2 ]

1 голос
/ 20 октября 2019

Ваше заявление use должно быть:

use Illuminate\Foundation\Auth\User as Authenticatable;

не это

use Illuminate\Foundation\Auth\Vendor as Authenticatable;

0 голосов
/ 20 октября 2019

Вы просто решили не использовать User модель для аутентификации. Поскольку вы хотите использовать встроенную функцию аутентификации laravel, но с пользовательской моделью, ваша Vendor модель должна расширять Illuminate\Foundation\Auth\User, что обеспечит Vendor модель. Все функции и методы аутентификации, используемые во время аутентификации Laravel, а не Illuminate\Foundation\Auth\Vendor, который не существует (Illumiate\Foundation\Auth - это пространство имен laravel`, не ваше)

Даже если вы создаете свой собственный класс Vendor, он можетЕсли вы не находитесь в пространстве имен Illuminate \ Foundation \ Auth`, которое используется laravel для пространства имен, у вас есть доступ только к тому пространству имен, которое вы создаете, а не к пространству имен сторонней библиотеки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...