首先,我确实处于Laravel的初级阶段。所以,请原谅我,帮帮我。
我正在尝试仅使用Laravel(出于学习目的)构建应用程序,而我使用 Laravel Collective 创建表单。我已经学会了如何创建表单并将这些值发送到数据库并在网站上显示。
但是,我想做的是我要为其中一个输入运行几个函数(假设如果一个名为“ operator”的字符串字段具有此值->“ +”,那么它将运行 Addition函数。)我的方法是:创建一个控制器,并将此public function addition($operator, $value1, $value2)
添加到功能检查if($operator== '+')
中,然后执行此操作。我朝着正确的方向前进吗?
我还有一个查询,例如,在控制器的存储功能中,我知道如何验证表单的字段:$this->validate(request, ['text'=> 'required|max:999']);
我要弄清楚的是如何确保仅允许四个主要算术运算符作为输入。否则它将无法正常工作。那么,你们可以指导我吗?
答案 0 :(得分:0)
有很多方法可以实现这一点,每种方法都有其优点和缺点。如果您不是Laravel的新手,那么下面的内容可能会有点高级,但是我相信如果您仔细阅读文档,便可以理解它,因为它很容易理解和直观。
我建议您:
假设您要检查某些输入值是否为实际算术运算符。在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, ['+', '-', '*', '/']);
当然,可能还有许多其他方式。
可以随意采用一种事实,这种方法对您来说更加清晰,您将可以在以后学习更多的编程技术时进行重构。
因此,既然您可以将运算符与其他任何字符区分开,则可以使用实现该代码的custom validation rule:
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从其文档中建议的可能选项之一。最后,一切取决于您。尝试理解每一部分,请务必阅读文档,因为它非常有帮助,并尝试将问题分解为若干步骤。编写最适合您的代码,并始终考虑 我会回来 进行重构。