今天用 Laravel 的查询构造器写事务提交代码,出现了一个坑。
Laravel 官方文档 http://laravelacademy.org/post/6133.html 事务提交最重要的失败之后捕获错误的案例代码没有提供。而且 Laravel 本身自己搞了一套异常处理类,但是在文档里面没有明确指出该使用哪个异常处理类捕获事务提交失败的代码,我还是借助搜索引擎查到 https://segmentfault.com/a/1190000008268648 文章中讲到用\Illuminate\Database\QueryException
来捕获异常。而文档开头对异常处理的讲解篇幅也很少, http://laravelacademy.org/post/5774.html 只讲了用户如何自己定义自己的异常处理类,没有列出 Laravel 本身的某些服务需要用哪些异常处理类捕获。如果没有这篇文章的话,我都可能要自己去一个一个的翻源码了。(然而 Laravel 看源码也麻烦,得先看 Facades 上代理了哪些类的哪些方法,然后一个一个去找实现类,然而实现类里面又是层层调用和跳转,对于涉世未深的 PHPer 来说真的很麻烦)
还有就是 session 部分, Laravel 中自己实现了一套 session 驱动,虽然在文档中也说明了。但是没有明确指出 file 驱动使用的并不是 php 自带的 session 处理句柄(在别的框架中file驱动默认都是用php原生session处理),导致在 sf.gg 等网站上有大量提问都是关于“为什么 Laravel 中无法使用 php 原生 session 处理函数”的问题。还有就是文档中没有写明如果中途使用 exit 等函数强制终止脚本 之前必须要用 Session::save()立即保存 session 数据,这个在 sf.gg 上也有很多人提问。
你们是如何看待这些“坑”?其他框架的文档中是否也有类似的情况?(此贴不是单纯对开源项目的吐槽还请大家轻喷,我当然愿意为官方文档的完善贡献一些力量)
1
xzem 2017-03-15 13:55:32 +08:00
坑肯定有的, 而且官方文档一般也不会讲的那么详细.
|
2
changwei OP @xzem 这个不能叫详细把,这些都属于基本内容。看看 http://www.kancloud.cn/manual/thinkphp5/139063 ThinkPHP 的案例代码都很详细,包括 CodeIgniter 等框架的文档都是如此。 Laravel 的文档很多地方给人的感觉就是点到为止,比较适合有很多 PHP 框架开发经验的开发者用。
|
3
xzem 2017-03-15 16:28:46 +08:00
@changwei 对啊,我说的就是"不会讲的那么详细", ThinkPHP 感觉也不是很详细. 你发的链接不是用 \Exception 来捕获的吗? 同样 laravel 也可以用 \Exception 捕获啊
|
4
changwei OP @xzem 但是关于数据库事物执行的异常,用 exception 真的无法捕获到,这个是官方文档没有提到过的东西。
|
5
xzem 2017-03-16 09:39:30 +08:00 via Android
@changwei 下面手机打字,有错误请见谅。
我看你说用 Illuminate\Database\QueryException 来捕获事务异常,然后我去看了下这个异常类。 它继承了 PDOException , PDOException 继承了 RuntimeException, RuntimeException 继承了 Exception . 所以直接用 Exception 捕获是可以捕获的,就像你发的那个 thinkphp 的例子就是用 Exception 捕获异常的。 php 的所有异常类都基于 Exception 这个基础异常类的扩展类,所以用 Exception 应该能捕获所有能捕获的异常 |