Laravel-如何在模型和控制器中验证分级系统



我正在使用Laravel-5.8框架开发一个web应用程序。我有一个模型类,如下所示:

<?php
namespace App;
use AppModel;
class Gradesystem extends Model
{
protected $table = 'grade_systems';
}  

我的控制器如下所示:

public function store(Request $request){
$request->validate([
'grade_system_name' => 'required|string|max:255',
'point' => 'required',
'grade' => 'required',
'from_mark' => 'required',
'to_mark' => 'required',
]);
$gpa = new Gradesystem;
$gpa->grade_system_name = $request->grade_system_name;
$gpa->point = $request->point;
$gpa->grade = $request->grade;
$gpa->from_mark = $request->from_mark;
$gpa->to_mark = $request->to_mark;
$gpa->save();
}

如何验证,可能是从from_mark和to_mark之间的模型或控制器。此外,from_mark不应大于或等于to_mark。它不能允许一个落在现有值范围内的数字。例如,如果from_mark0,to_mark为49,则数据库中已经存在。因此,如果用户输入from_mark或to_mark为30,则不得允许。

我该如何做到这一点?

谢谢。

对于自定义验证,它可以更好地使用规则对象,在那里您可以实现验证的逻辑。

示例:

<?php
namespace AppRules;
use IlluminateContractsValidationRule;
class Uppercase implements Rule
{
/**
* Determine if the validation rule passes.
*
* @param  string  $attribute
* @param  mixed  $value
* @return bool
*/
public function passes($attribute, $value)
{
return strtoupper($value) === $value;
}
/**
* Get the validation error message.
*
* @return string
*/
public function message()
{
return 'The :attribute must be uppercase.';
}
}

您可以在Laravel文档中查看信息

希望这能帮助你

我不理解您要求的整个验证,但这会有所帮助。用同样的方法,您可以在from_markto_mark上编写任何其他验证。

$validator = Validator::make($request->all(), [
'grade_system_name' => 'required|string|max:255',
'point' => 'required',
'grade' => 'required',
'from_mark' => 'required',
'to_mark' => 'required',
]);
if ($validator->fails()) {
return redirect()->back()->withInput()->withErrors();
}
if ($request->get('from_mark') < $request->get('to_mark')) {
return redirect()->back()->withInput()->withErrors();  
}

最新更新