Есть много способов достичь этого, и у каждого будут свои плюсы и минусы.Следующее может быть немного сложнее, если вы совершенно не знакомы с 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 предлагает из своей документации.В конце концов, это всегда зависит от вас.Постарайтесь понять каждую часть, всегда читайте документацию, поскольку она очень полезна, и постарайтесь разбить вашу проблему на этапы.Кодируйте наименьшее, что вам подходит, и всегда учитывайте Я вернусь для рефакторинга.