Настройка проверки - PullRequest
       0

Настройка проверки

1 голос
/ 13 марта 2020

Сейчас я работаю над созданием проверки, когда пользователь не указал, какой пользователь будет обрабатывать задачу. Ввод user_id вводится в список опций. В TaskController:

public function create(Request $request)
    {

        $task = new Task();
        $task->description = $request->get('description'); 
        $task->user_id = $request->get('user_id');
        $val = Task::Inputvalidator($request->validated()); 
        $file = $request->file('file');
        if($request->hasFile('file')){
            foreach($file as $file){
                $file->move('storage/uploads', $file->getClientOriginalName());
                $task->image =\Storage::url("uploads/".$_FILES["file"]["name"][0]);
                $task->image2 =\Storage::url("uploads/".$_FILES["file"]["name"][1]);
                $task->save();
            }

        }
        $task->task_date = request('task_date');
        $dt1 = Carbon::now();
        $dt2 = Carbon::parse($task->task_date);
        if($dt1 > $dt2){
            echo $messages->first("You have to chose after today as the deadline");
            return redirect('/');
        }else{
            $dt3 = $dt1->diffInDays($dt2);
            $task->expired = $dt3;
        }


        $duplicate = Task::where('description',$request->get('description'))->first();
        $duplicateUser = Task::where('user_id',$request->get('user_id'))->first();
        $duplicateDate = Task::where('task_date',$request->get('task_date'))->first();
        if($duplicate&&$duplicateDate&&$duplicateUser)
        {
            return redirect('/')->with('popup', 'duplicate');
        } 
        else
        { 
            $task->save();
        } 

        return redirect('/'); 
    }

В моей модели задач:

 protected $fillable = ['name','user_id','description','task_date'];

    public function user()
    {   
        return $this->belongsTo(User::class);
    }

    public static function Inputvalidator(Request $request){

            $rules = array(
            'user_id' =>'required|not_in:0'
            );
        $this->validate($request,$rules);
    }

    protected function getInputCredentials(Request $request){

        $validator = $this->inputvalidator($request);

        var_dump($validator); die();

        if($validator->passes())
        {
            return[
                'user_id' => Request::input('user_id')
            ];

            return true;
        }
        else{
            return redirect()->back()->withErrors();
        }
    }

Но я сейчас придумываю другую ошибку, слишком мало аргументов, запрос нужно экземпляр. Теперь под этим кодом сказано неопределенные правила для переменных. Я не слишком уверен, что я должен исправить этот код. Можете ли вы помочь мне решить и проверить этот код правильно или нет? Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 марта 2020
  1. Выполнить php artisan make:request TaskRequest

  2. Заполнить новый app\Http\Requests\TashRequest.php файл:

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class TaskRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'user_id' =>'required|not_in:0',
        ];
    }
}
В контроллере выполните что-то вроде:

<?php

namespace App\Http\Controllers;

...

use App\Http\Requests\TaskRequest;

...

class YourControllerName extends Controller
{

...

    public function yourMethodName(TaskRequest $request)
    {
        $validatedData = $request->validated();

...

Если вышеприведенная проверка не пройдена, он вернется обратно с 422, и сообщения автоматически будут готовы к извлечению из пакета сообщений.

Источники:

Пример в дикой природе:

1 голос
/ 13 марта 2020

Вместо передачи $ this-> validate ($ request, $ rules) параметра внутри Inputvalidator () , просто передайте переменную $ request как функция ожидает.

//TaskController

$task->user_id = $request->get('user_id');
$val = Task::Inputvalidator($request); 

Вместо использования запроса проверки внутри модели для повторного использования, Laravel обеспечивает Создание проверки формы запроса под капотом для простоты и понятности.

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