8rmEHZ8WhVHVOb0E
2024-02-03 18:28:08 +08:00
我以前也是用 Yii2 的,后来转投 laravel 了,我可以负责任的说,Yii 比 laravel 更难,也更难用,Yii 的组件比较好理解,其实和 laravel 的服务容器是一个目的,就是保存核心组件比如路由、配置、request 、response 的单例,这部分 laravel 的比较难理解一些没错,不过这是后端通用的,网上找个解说十几分钟半小时就明白了。
你在一个请求中可能会多次用到 request 类,不可能每次用到就实例化一个 request 类, 所以单例是必须的,除了保持只实例化一次,另外一个目标就是有调用才实例化,比如 log 日志组件,当然是有写日志的需求时才实例化,代码中没有写日志,那就没必要实例化了,否则就浪费资源来实例化一个类,还占用了内存。
Yii 的做法是把组件全部放在 Application 类上面 ,Yii::$app 静态变量保存 Application 的单例,然后通过 Yii::$app->request 获得 request 类的单例。
thinkphp5 (5.1 以后实现了容器) 的做法是 Request::instance(), 这个过于基础就不解释了。
除了容器稍微比 Yii 麻烦一点外,laravel 是比 Yii 简单易用的,尤其是 Yii 的验证器和 model 绑定,jquery 深耦合,面对非传统表单页面时用起来很麻烦。