Как создать и использовать более специфичное для домена правило проверки в Laravel? - PullRequest
0 голосов
/ 16 сентября 2018

Прежде всего, я действительно в начальной стадии Laravel. Поэтому, пожалуйста, извините меня и помогите мне.

Я пытаюсь создать приложение, используя только Laravel (для целей обучения), где я создаю форму, используя Laravel Collective . Я научился создавать форму и отправлять эти значения в базу данных и показывать ее на сайте.

Однако я пытаюсь выполнить несколько функций для одного из входных данных (предположим, что если строковое поле с именем «operator» имеет это значение -> «+», то оно будет запускать Addition). function .) Мой подход таков: создайте контроллер и добавьте public function addition($operator, $value1, $value2) в функцию check if($operator== '+'), затем сделайте это. Я иду в правильном направлении?

У меня есть еще один запрос, я знаю, как проверить поля формы, выполнив это, например, в функции хранилища контроллера: $this->validate(request, ['text'=> 'required|max:999']);

То, что я пытаюсь выяснить, - это просто убедиться, что только четыре основных арифметических оператора могут быть использованы в качестве входных данных. Иначе это не сработает. Итак, вы, ребята, можете мне помочь?

1 Ответ

0 голосов
/ 16 сентября 2018

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

Я предлагаю вам:

  • Создать настраиваемое правило проверки для использования в вашем контроллере
  • Объявить эту настраиваемую проверку в поставщике услуг
  • Использовать его в своемcontroller

Создайте пользовательское правило проверки

Представьте, что вы хотите проверить, является ли определенное входное значение действительным арифметическим оператором.Есть много способов сделать это в PHP.Вот некоторые из них:

if($value == '+' || $value == '-' || $value == '*' || $value '/')
{
  // It IS a valid operator
}

Другой способ, как предлагается в комментариях выше, - использовать переключатель:

switch($value)
{
   case '+':
   case '-':
   case '*':
   case '/':
      // it IS a valid operator
      break;
   default:
      // otherwise, it is NOT

}

Я лично предпочитаю поиск в массиве:

in_array($value, ['+', '-', '*', '/']);

Конечно, может существовать много других способов.

Не стесняйтесь принять тот, который вам понятнее, и вы сможете рефакторинг позже, когда узнаете больше методов программирования.

Итак, теперь, когда вы можете отличить оператор от всего остального, вы можете использовать пользовательское правило проверки , которое реализует этот код:

    Validator::extend('operator', function ($attribute, $value, $parameters, $validator) {
        return in_array($value, ['+', '-', '*', '/']);
    });

Обратите внимание, что у нас естьназвал это operator, но вы можете выбрать любое имя вашей воли.Постарайтесь, чтобы это было чисто и интуитивно понятноНесколько альтернатив: valid_operator, arithmetic_operator и т. Д.

Объявите правило в сервис-провайдере

Но для фактического использования правила вам необходимо где-то выполнить этот код.Хорошее место для начала - метод boot() поставщика услуг.Вы можете использовать свой AppServiceProvider, и вы всегда можете переместить его в другое место (например, к более специализированному поставщику услуг), когда узнаете, как структурировать свое приложение.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Validator::extend('operator', function ($attribute, $value, $parameters, $validator) {
            return in_array($value, ['+', '-', '*', '/']);
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Используйте его в контроллере

Поскольку теперь у вас есть свое пользовательское правило, вы можете использовать его следующим образом:

$this->validate($request, ['text'=> 'required|operator']);

Заключительные слова: Помните, что это не единственный способ сделать это.Это один из возможных вариантов, которые Laravel предлагает из своей документации.В конце концов, это всегда зависит от вас.Постарайтесь понять каждую часть, всегда читайте документацию, поскольку она очень полезна, и постарайтесь разбить вашу проблему на этапы.Кодируйте наименьшее, что вам подходит, и всегда учитывайте Я вернусь для рефакторинга.

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