Проверка API Laravel (разные правила в зависимости от маршрута) - PullRequest
0 голосов
/ 11 ноября 2019

В настоящее время я использую Laravel с Infyom для создания серверной части, но я не понимаю, как использовать несколько правил проверки в зависимости от маршрута API, например, когда я создаю пользователя, обаполя email и роль должны быть предоставлены конечной точке, но при обновлении пользователя (из-за логина), должны присутствовать только адрес электронной почты и пароль. Я хочу иметь другой набор правил o в зависимости от используемой конечной точки, возможно ли это и как? В настоящее время конечная точка всегда возвращает

{
  "message": "The given data was invalid.",
  "errors": {
    "role": [
      "The role field is required."
    ]
  }
}

Мои маршруты / api.php выглядят так

<?php

use Illuminate\Http\Request;


Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});


Route::post('login', 'TokenAPIController@loginUser');
Route::put('login/updateToken/{id}', 'TokenAPIController@updateToken');


Route::resource('users', 'UserAPIController');

Route::resource('roles', 'RoleAPIController');

Route::resource('roles', 'roleAPIController');

Route::resource('product_variants', 'Product_variantAPIController');

Route::resource('product_images', 'Product_imageAPIController');

Route::resource('product_categories', 'Product_categoryAPIController');

Route::resource('products', 'ProductAPIController');

Route::resource('orders', 'OrderAPIController');

Route::resource('order_products', 'Order_productAPIController');

Route::resource('notifications', 'NotificationAPIController');

Route::resource('factories', 'FactoryAPIController');

Route::resource('statuses', 'StatusAPIController');

Приложение моего пользователя / Models / User.php

<?php

namespace App\Models;

use Eloquent as Model;
use Illuminate\Database\Eloquent\SoftDeletes;


class User extends Model
{
    use SoftDeletes;

    public $table = 'users';

    const CREATED_AT = 'created_at';
    const UPDATED_AT = 'updated_at';


    protected $dates = ['deleted_at'];



    public $fillable = [
        'name',
        'role',
        'email',
        'password',
        'remember_token',
        'notification_token',
        'factory',
        'api_token'
    ];

    /**
     * The attributes that should be casted to native types.
     *
     * @var array
     */
    protected $casts = [
        'id' => 'integer',
        'name' => 'string',
        'role' => 'integer',
        'email' => 'string',
        'password' => 'string',
        'remember_token' => 'string',
        'notification_token' => 'string',
        'factory' => 'integer',
        'api_token' => 'string'
    ];

    /**
     * Validation rules
     *
     * @var array
     */
    public static $rules = [
        'role' => 'required',
        'email' => 'required'
    ];


    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     **/
    public function role()
    {
        return $this->belongsTo(\App\Models\Role::class, 'role');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     **/
    public function factory()
    {
        return $this->belongsTo(\App\Models\Factory::class, 'factory');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     **/
    public function orders()
    {
        return $this->hasMany(\App\Models\Order::class, 'customer');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     **/
    public function order1s()
    {
        return $this->hasMany(\App\Models\Order::class, 'responsible');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     **/
    public function notifications()
    {
        return $this->hasMany(\App\Models\Notification::class, '"from"');
    }

    /**
     * @return \Illuminate\Database\Eloquent\Relations\HasMany
     **/
    public function notification2s()
    {
        return $this->hasMany(\App\Models\Notification::class, '"to"');
    }
}

* 1009И, наконец, мой TokenAPIController.php
<?php 

namespace App\Http\Controllers\API;

use App\Http\Requests\API\CreateUserAPIRequest;
use App\Http\Requests\API\UpdateUserAPIRequest;
use App\Models\User;
use App\Repositories\UserRepository;
use Illuminate\Http\Request;
use App\Http\Controllers\AppBaseController;
use Response;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Hash;

class TokenAPIController extends AppBaseController
{
   /** @var  UserRepository */
   private $userRepository;

   public function __construct(UserRepository $userRepo)
   {
       $this->userRepository = $userRepo;
   }

    public function loginUser(UpdateUserAPIRequest $request)
    {   /** @var User $user */
        $input = $request->all();

        if (!isset($input['email'])) {
            return $this->sendError('Email is required');
        }
        if (!isset($input['password'])) {
            return $this->sendError('Password is required');
        }

        $user = User::where('email', $input['email'])
        ->first();
        if (empty($user)) {
            return $this->sendError('User not found');
        }
        $validCredentials = Hash::check($input['password'], $user["password"]);

        if ($validCredentials) {
            return $this->updateToken($user["id"]);

        }


        return $this->sendError('No match');
    }

    public function updateToken($id)
    {

       // $input = $request->all();

        /** @var User $user */
        $user = $this->userRepository->find($id);

        if (empty($user)) {
            return $this->sendError('User not found');
        }
        $token = Str::random(60);

        $user->forceFill([
            'api_token' => hash('sha256', $token),
        ])->save();

        return $this->sendResponse($user->toArray(), 'User updated successfully');
    }

}

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