【发布时间】:2018-04-23 11:47:52
【问题描述】:
有一种将 CSV 数据导入数据库的方法。我使用
进行一些基本验证class CsvImportController extends Controller
{
public function import(Request $request)
{
$this->validate($request, [
'csv_file' => 'required|mimes:csv,txt',
]);
但在那之后,事情可能会因为更复杂的原因而出错,在兔子洞的更深处,这会引发某种异常。我无法在此处编写与 validate 方法一起使用的正确验证内容,但是,我真的很喜欢 Laravel 在验证失败时的工作方式以及将错误嵌入刀片视图等的容易程度,所以。 ..
有没有(最好是干净的)方法来手动告诉 Laravel “我知道我现在没有使用你的 validate 方法,但我真的希望你公开这个错误就像我在这里一样”?有什么我可以返回的,一个我可以包装的异常,还是什么?
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 的验证以添加像 yhis
Validator::extend('foo', function ($attribute, $value, $parameters, $validator) { return $value == 'foo'; });这样的复杂处理,然后您可以在规则'csv_file' => 'required|foo|mimes:csv,txt',中添加 foo 规则?? -
@Svish 你有你的自定义验证类来抛出验证错误吗?
-
@Svish 我认为 madalinivascu 的 解决方案是您的答案。
-
您可以在 catch 块中捕获错误消息并执行您的操作。像这样
try { //my stuff } catch (Exception $ex) { echo $ex->getMessage(); //Message //$ex->getFile(); //File //$ex->getLine(); //Line } -
或者您也可以进行自定义验证并抛出错误,然后像这样在 catch 中处理它
try { $validator = Validator::make($request, ['csv_file' => 'required|mimes:csv,txt']); if ($validator->fails()) { throw new Exception(implode('<br>', $validator->errors()->all()), 999); } } catch (Exception $ex) { if ($ex->getCode() == 999) { //this is a custom error } echo $ex->getMessage(); //Message }
标签: php laravel validation exception error-handling