
本教程详细介绍了在lar*el表单中,如何通过将“返回”按钮从提交类型更改为标准链接,从而在用户点击返回时绕绕过不必要的表单验证。文章将通过优化前端视图和后端控制器逻辑,提供一种简洁、高效且符合web标准的方法,确保表单验证仅在真正需要提交数据时触发,从而提升用户体验和代码清晰度。
在构建Web应用程序时,表单是用户交互的核心组件。特别是在数据录入场景中,一个表单可能包含“提交”和“返回”两个操作按钮。然而,当“返回”按钮也被设计为表单提交类型时,它往往会意外触发Lar*el的表单验证机制,导致用户在尝试返回时看到不必要的验证错误。本文将深入探讨这一问题,并提供一种优雅且符合Web最佳实践的解决方案。
Lar*el通过Illuminate\Foundation\Http\FormRequest类提供了一种强大且便捷的表单验证方式。当一个控制器方法类型提示了FormRequest实例时,Lar*el会在请求到达控制器方法之前自动执行该FormRequest中定义的验证规则。如果验证失败,系统会自动将用户重定向回前一页,并闪存(flash)错误信息和旧的输入数据。
以下是一个典型的FormRequest示例:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MoviesFormRequest extends FormRequest
{
/**
* 确定用户是否有权发出此请求。
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* 获取适用于请求的验证规则。
*
* @return array
*/
public function rules()
{
return [
'movie_name' => 'required|string|max:255',
'movie_description' => 'required|string',
'movie_gener' => 'required|string|max:255',
];
}
}在控制器中,只需简单地注入此请求:
use App\Http\Requests\MoviesFormRequest;
use App\Models\Movie; // 假设Movie模型存在
public function store(MoviesFormRequest $request)
{
// 验证通过,数据已在 $request->validated() 中
$data = $request->validated();
Movie::create($data);
return redirect()->route("movies.index")->with('success', '电影添加成功!');
}许多开发者在处理包含“添加”和“返回”按钮的表单时,可能会将两者都设置为type="submit",并通过一个隐藏字段或按钮的name属性来区分操作。
原始视图代码示例:
<form method="POST" action="{{route("movies.store")}}" class="mt-5 w-50 m-auto">
@csrf
<div class="mb-3">
<label class="form-label">Movie Name</label>
<input type="text" name="movie_name" class="form-control">
@error('movie_name')
<span class="error">{{$message}}</span>
@enderror
</div>
<!-- 其他输入字段... -->
<button type="submit" name="action" value="back" class="btn btn-warning me-3">Back</button>
<button type="submit" name="action" value="add" class="btn btn-primary">Add</button>
</form>相应的控制器逻辑:
public function store(MoviesFormRequest $request)
{
switch ($request->input('action')) {
case 'back':
// 尽管是“返回”操作,但表单仍被提交,FormRequest验证依然会触发
return redirect()->route("movies.index");
case 'add':
$data = $request->validated(); // 只有这里才真正需要验证
Movie::create($data);
return redirect()->route("movies.index");
}
}这种方法的缺点在于,无论是点击“Back”还是“Add”,表单都会被提交到movies.store路由,从而触发MoviesFormRequest中的所有验证规则。如果用户在未填写任何内容的情况下点击“Back”,他们仍会看到验证错误,这显然不是我们期望的用户体验。
Seede AI
AI 驱动的设计工具
713
查看详情
解决此问题的最佳实践是:将“返回”操作视为一个导航行为,而非表单提交行为。因此,我们应该使用一个标准的HTML 标签来处理“返回”按钮,而不是type="submit"的按钮。
更新后的Blade视图代码:
<form method="POST" action="{{route("movies.store")}}" class="mt-5 w-50 m-auto">
@csrf
<div class="mb-3">
<label class="form-label">Movie Name</label>
<input type="text" name="movie_name" class="form-control">
@error('movie_name')
<span class="error">{{$message}}</span>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Movie Descrption</label>
<input type="text" name="movie_description" class="form-control">
@error('movie_description')
<span class="error">{{$message}}</span>
@enderror
</div>
<div class="mb-3">
<label class="form-label">Movie Gener</label>
<input type="text" name="movie_gener" class="form-control">
@error('movie_gener')
<span class="error">{{$message}}</span>
@enderror
</div>
<!-- “返回”按钮改为锚点链接 -->
<a href="{{ route('movies.index') }}" class="btn btn-warning me-3">Back</a>
<!-- “添加”按钮保持不变,仍是提交表单 -->
<button type="submit" name="action" value="add" class="btn btn-primary">Add</button>
</form>解释: 通过将“Back”按钮改为标签,并将其href属性指向目标路由(例如movies.index),用户点击时将直接发起一个GET请求到该路由。这个操作不会触发表单提交,因此FormRequest的验证机制也完全不会介入。这完美地实现了在点击“返回”时跳过验证的需求。
由于“返回”操作不再提交表单到store方法,控制器中的switch语句变得不再必要。store方法现在可以完全专注于处理表单的有效提交数据。
更新后的控制器代码:
use App\Http\Requests\MoviesFormRequest;
use App\Models\Movie;
class MovieController extends Controller // 假设控制器名为MovieController
{
public function store(MoviesFormRequest $request)
{
// 此时,只有当“Add”按钮被点击并成功提交表单时,才会执行到这里
// 并且 FormRequest 已经确保了数据的有效性
$data = $request->validated();
Movie::create($data);
return redirect()->route("movies.index")->with('success', '电影添加成功!');
}
}MoviesFormRequest
类中的验证规则仍然是处理“添加”操作的关键。它确保了只有符合要求的数据才能被存储到数据库中。
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class MoviesFormRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'movie_name' => 'required',
'movie_description' => 'required',
'movie_gener' => 'required',
];
}
}通过将Lar*el表单中的“返回”按钮从提交类型更改为标准标签,我们能够有效地绕过不必要的表单验证,从而优化用户体验并简化后端控制器逻辑。这种方法符合Web开发中的职责分离原则,使得应用程序更加健壮和易于维护。在设计表单时,始终应考虑操作的本质:如果它只是导航,那么标签是比type="submit"按钮更合适的选择。
以上就是Lar*el表单中优雅地处理“返回”按钮以规避验证:最佳实践指南的详细内容,更多请关注php中文网其它相关文章!
# 是一个
# 安庆抖音营销推广公司
# 枣庄线上seo策划招聘
# 霍州网站推广外包
# seo资源指的是什么
# 广州seo广告推广
# 简明网站建设合同
# 广元工程建设招聘网站
# 青羊区商城网站建设流程
# 绥化网站推广解决方案
# 保险内容网站推广
# 才会
# 这种方法
# 是在
# 这一
# 器中
# css
# 应用程序
# 加载
# 表单
# 表
# web应用程序
# 路由
# switch
# 后端
# app
# bootstrap
# 前端
# html
# laravel
# php
相关文章:
Gmail邮箱申请注册直达_Gmail邮箱免费注册PC版官网入口2025
c++项目目录结构应该如何组织_c++工程化项目结构规范
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
163邮箱官方主页登录 直达网易邮箱登录核心页面
AO3最新可访问网址 Archive of Our Own官方在线入口
12306选座怎么选到特殊座位_12306特殊座位选择注意事项
cad怎么合并重叠的线段_cad清理重复重叠线条的操作方法
必由学在线入口 必由学网页版快速登录入口
在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析
LINUX怎么设置定时任务_LINUX crontab配置教程
Win10怎么制作U盘启动盘 Win10系统安装U盘制作教程【详解】
TypeScript/J*aScript:高效查找数组中首个唯一ID对象
QQ官网正版登录链接 QQ在线登录入口最新
Steam官网入口直达 Steam注册及登录步骤
网站内容防复制粘贴的实现策略与局限性
马斯克:Optimus 人形机器人复数形式为 Optimi
如何将HTML表格多行数据保存到Google Sheet
韩剧圈正版入口页面_韩剧圈官网登录链接
age动漫网站入口 age动漫官网直接访问入口
自动化J*a应用中GitHub CLI或REST API的认证与交互
“在文档元素之后找到了标记”是什么错误? 检查并修复XML中多个根元素的3个方法
c++如何实现单例设计模式_c++线程安全的单例模式写法
J*aScript对象创建方式_J*aScript设计模式应用
在J*a里如何理解依赖关系的方向_依赖方向在模块结构中的作用
Composer如何解决json扩展缺失的错误
手机CPU怎么影响游戏体验_手机CPU对游戏性能的影响分析
使用 Pandas 高效处理 .dat 文件:字符清理与数据计算
支付宝如何设置安全保护_支付宝安全设置的全面教程
Golang如何使用const iota_Go iota常量计数器讲解
Lar*el Form Request 中唯一性验证更新操作的正确实践
HTML长属性值处理:表单action路径优化与代码规范应对
GemBox Document HTML转PDF垂直文本渲染问题及解决方案
2025年云电脑操作系统体验 | 无需本地硬件,随时随地使用高性能PC
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南
如何在 Excel Online 和 Google 表格中更改日期格式
漫蛙2正版漫画站 漫蛙2网页版快速访问入口
AO3最新入口2025公告_AO3中文官网合集
QQ邮箱正确登录入口_QQ邮箱官方网站使用地址
cad如何更改注释性对象的比例_cad注释性比例调整方法
小猿搜题在线学习页面在哪_小猿搜题在线学习中心入口
Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法
优化大型XML文件解析:基于Python流式处理的内存高效方案
WooCommerce 购物车显示所有交叉销售商品教程
Python类型检查:优化关联可选属性的Mypy推断策略
MAC怎么安装Homebrew包管理器_MAC为开发者和高级用户安装命令行工具
Flexbox布局实践:实现粘性导航栏与底部固定页脚
Typer应用中动态命令行参数的解析与处理
AngularJS $http POST请求数据传递与Go后端接收实践
*请认真填写需求信息,我们会在24小时内与您取得联系。