我有一个将CSV数据导入到数据库的方法.我使用以下工具进行一些基本的验证

class CsvImportController extends Controller
{
    public function import(Request $request)
    {   
        $this->validate($request, [
            'csv_file' => 'required|mimes:csv,txt',
        ]);

但在那之后,由于更复杂的原因,事情可能会出问题,进一步深入兔子洞,这会引发某种例外.我无法编写与validate方法一起使用的正确的验证内容,但是,我真的很喜欢Laravel在验证失败时的工作方式,以及将错误嵌入到blade视图中是多么容易,等等,所以...

有没有(最好是干净的)方法来告诉拉威尔"我知道我现在没有使用你的validate方法,但我真的希望你在这里像我那样expose 这个错误"?有什么东西我可以退回,有什么例外我可以用它来包装东西,还是什么?

try
{
    // Call the rabbit hole of an import method
}
catch(\Exception $e)
{
    // Can I return/throw something that to Laravel looks 
    // like a validation error and acts accordingly here?
}

推荐答案

从laravel 5.5开始,您可以使用的ValidationException class has a static method withMessages个:

$error = \Illuminate\Validation\ValidationException::withMessages([
   'field_name_1' => ['Validation Message #1'],
   'field_name_2' => ['Validation Message #2'],
]);
throw $error;

我还没有测试过这个,但应该能用.

Update

消息不必包装在数组中.你也可以做:

use Illuminate\Validation\ValidationException;

throw ValidationException::withMessages(['field_name' => 'This value is incorrect']);

Php相关问答推荐

根据未用于变体的产品属性隐藏WooCommerce发货方式

如何在Foreach语句中使用php和li按降序排序?

将部分产品排除在WooCommerce的计算附加费之外

将日期数组排序为年->;月

PHP文件上载问题-";Move_Uploaded_Files";未按预期工作

Azure应用程序无法访问共享文件夹

Laravel 10.x在到达控制器之前将查询参数强制转换为正确的类型

WooCommerce 中一件免费产品的数量折扣

单个产品页面 WooCommerce 订阅价格字符串的更改

通过添加计数器修改文本区域表单中的重复值

将产品数量、名称和结帐链接添加到 WooCommerce 添加到购物车消息

在 vue 自定义渲染器中访问变量

根据页面的最后修订日期设置 MediaWiki 内部链接的样式

如何在WooCommerce中为访客购买者分配自定义客户代码

如何用 php ML 解决这个问题?

PHP Loop 在迭代中使用修改后的数据

来自命令行的 PHP 没有给出正确的结果

如何为多个表的id列设置不同的值

基于其他数组创建多维数组 struct

如何在 Laravel 中保存多对多