为什么我不太想用 Laravel ?

本文首发在我的个人公众号,欢迎关注。
file

不是不用,是不太想用。

N年前 Laravel 刚面世时,的确让很多人眼前一亮,众人惊呼原来 PHP 代码还可以写得这么简洁优雅。

现在公司有两个项目基于 Laravel5,使用下来总感觉别扭。其实到目前为止,还没有一款真正让我喜欢的框架。曾经年少轻狂,写过框架并用在某教育门户网站,现在看来,还是 too young too simple。从工作到现在,使用、研究过各类流行框架,如Yaf、Yii、CodeIgniter、ThinkPHP、Symfony、Laravel、Slim 、ZendFramework2 等等。

  • CI 就不说了,上世纪产品。
  • TP 理念陈旧,懒得吐槽。
  • ZF2 用过一个实际项目,从此再也不碰了。
  • Yii 还行,只是还行。。
  • Slim 轻量级,实际用起来略繁琐。
  • Symfony 重量级框架,复杂,同时强大。
  • Laravel 挺像 Rails,简洁优雅,同时强大。

不得不说,从设计哲学、功能组件、扩展性、社区等各方面来看,Laravel 当之无愧是最火热的PHP框架。
我个人现在主要用 Symfony3,主要是因为熟悉,也有挺多我很喜欢的特性,其它也有很多令人不爽的地方,这个后面单独细讲。

现在主要讲讲 Laravel 让我不爽的地方。

1. 对 IDE 不友好

这一点之所以放第一位,是因为我觉得框架对 IDE 友好直接跟工作效率相关。
说来惭愧,我现在脱离了 IDE(PhpStorm) 基本没法工作了,只能手写很简单的入门级 PHP 代码。反过来说,我个人认为,对 IDE 友好是框架的基本节操,再深挖下去,如果一个框架对 IDE 不友好,能说明什么问题?PhpStorm 堪称宇宙最强PHP IDE,为何就连 Laravel 项目的代码提示都搞不定?加上插件也撇脚?
读过 Laravel 代码后你就会逐步发现,里面用到了很多非常 magic 、tricky、hacky … (词穷了)的代码(或机制)。

下面列出一部分

1.1 首先是容器机制

Laravel 的容器机制的确设计得很灵活,比 Symfony 的 service container 机制灵活强大,但弊端在于对 IDE 不友好,如:
$xxx = \App::make('xxx');
这里你能直接知道 $xxx 是什么对象吗?你想调用其下的方法$xxx->someMethod()时, IDE 不会自动提示,你得翻代码,看文档,找到其 provider 是谁,具体提供了哪个对象,再去看该对象代码。
如默认 helper 里的代码:app('url')->route($name, $parameters, $absolute),如果想按住 Command 点击 route 方法,是不能跳转的,IDE 无法识别。

1.2 再来说 Facade ,同样的问题。

Redis::get这里的方法名不会自动提示,这类常用的简单方法还好,可以直接打出来,对于一些不常用的呢?比如 Redis::ZREMRANGEBYRANK 用之前是不是得查一下 redis 文档看看拼写错了没?虽然运行时大小写不敏感,但建议还是规范写成 Redis::zRemRangeByRank($key, $start, $end); 此时你又得查文档,代码里还找不到,因为这里 Redis 的 provider 提供的实际 instance 是 vendor/laravel/framework/src/Illuminate/Redis/Database.php,里面用 __call魔术方法调用 Predis Client。

再如,我在调用某个方法时,通常会先查看其参数有哪些,按住Command,鼠标移到方法名上,就可以显示了,如图:
file
但是这些 Facade 的静态方法 IDE 通通无法识别,只能继续查文档,翻代码。。
以上部分也就是其 “简洁” “优雅” 的一部分,但 IDE 碰到这些代码就一脸懵逼了,臣妾做不到啊。。。

1.3 Eloquent

通过 Model 查询数据时,我每次都按下面的方式写

\App\Models\User::query()->find(123);
\App\Models\User::query()->where('type', $type)->get();

而不是官方推荐的直接用 where 或 find 等静态方法形式

\App\Models\User::find(123);
\App\Models\User::where('type', $type)->get();

你应该猜到为什么了,因为调用 ->query()时会返回 Eloquent\Builder对象,这让 IDE 能够识别,后面的链式调用才能一气呵成。
而静态方法,又是通过魔术方法实现的,IDE 又跪了。

1.4 补丁?

别告诉我要用 laravel-ide-helper ,这个虽然能解决大部分 IDE 兼容问题,但对代码有侵入性,需要加到 composer.json 里,需要启用 provider,需要执行命令生成 meta 文件,这些跟你的项目本身没有半毛钱关系,这么做不觉得跟 Laravel 本身的简洁优雅背道而驰吗? (虽然我现在也加了。。)

总之,对 IDE 不友好,会影响开发者效率,或增加心理负担。

2. Laravel 做得太多

你们别扔鸡蛋。。“特么功能多了也能吐槽?傻x ”

2.1 魔法太多

准确的说这个应该算是优点,只不过。。不知道你们见过下面的姿势没有。。

$user_id = $this->request->get('user_id')
$user_id = $this->request->user_id
$user_id = $this->request['user_id']

我接手的某项目里此类情况挺多,实在是。。
从语义来看,只有第一个是正常的,也是Symfony\Component\HttpFoundation\Request里提供的默认用法,是调用 request 里 get 方法获取某个参数,而不是读 request 对象的user_id属性,更不是从request这个 ”数组(字典)” 里取user_id这个 key。无力吐槽。

Eloquent Model 对象也是类似,比如

$user = \App\Models\User::find(123);
$user->nickname
$user['nickname']

此类用魔术方法实现的机制有很多很多,可以试试搜索 laravel framework 代码,会发现非常多的 __call __callStatic __get __set __isset
以此实现的所谓优雅,带来的是语义缺失,写法五花八门。

2.2 自带的 helpers

例如 array_add array_last array_sort
这些辅助函数的确很有用,不过我自己从来不用,也不推荐。
因为曾有人问我:“这些不是 PHP 默认函数吗?”
好吧。。

以上只是很少一部分,这些严格来说不算是缺点,只是会让程序员更懒、更容易误导、更容易放弃追求本质。特别是对刚入门的程序员。

3. 功能相关

3.1 Facade 机制

前面已经提到一部分,调用某 facade 方法时,你得找到其 provider ,再找到真实 instance 才能看到提供了哪些方法,都有什么参数等等。
绕了一圈,才能找到真实出处,这点有些反直觉

另外,如果你想自定义 facade ,你得写一个 facade 模板文件,在 getFacadeAccessor 里返回一个唯一标识(取名),然后在某 provider 里注册一下,然后再加到配置文件的 aliases 中。
你会发现其实 facade 模板文件非常鸡肋,除了定义标识以外基本没卵用。

不过, Laravel5.4 版里已经优化成 real-time facade, 本质是说 “噢,facade 模板文件的确很鸡肋,现在我可以帮你自动生成~ 标识就是类名~
在找不到某个 facade 模板文件时帮你自动生成一个缓存文件,命名空间是 Facades\<your namespace>,此处仍然很 magic
如,以 App\MagicFacade为例

namespace App;
class MagicFacade
{
    public function hello() {
        return ’hello laravel’;
    }
}

然后
file

此时 PhpStorm 先懵逼一会。。

magic 之处在于,将某个类当做 facade 时,在其命名空间前加上 Facades\就可以了,现在你告诉我 Facades\App\MagicFacade 对应的方法文件是 App\MagicFacade ,其实生成的 cache 文件才是亲儿子。。
这难道不也是反直觉吗?语义呢?

3.2 Blade 模板

足够简单,但不够纯粹,感觉就是在写 PHP 代码,除了关键词替换了以外。如 $users as $user $loop->first 等等

@foreach($users as $user)
    @if ($loop->first)
        This is the first iteration.
    @endif
@endforeach

最不可思议的是,居然可以在模板里写 PHP 代码?

[@php](https://learnku.com/users/10050) 
    //wtf ?
@endphp

“权限”太大,以至于,还可以有这种操作?

@foreach(User::where('type',  $type)->get() as $user)
    {{ $user->name }}
@endforeach

当然,这也是开发规范问题。
不过我更喜欢 Twig 模板引擎,足够灵活,且职责明确。

4. 其它

以下这些问题其它框架也都存在,不是吐槽,只是个人喜好

4.1 路由定义

Laravel 的路由定义跟 Rails 很相似,不过我更喜欢 Symfony 里的写法:
file
用注释形式定义好路由信息就可以了,还顺带能自动生成API文档:
file
Laravel 从 5.0 开始去掉了类似功能,现在你可以通过第三方包 LaravelCollective/annotations实现此功能。

4.2 数据表维护

项目快速迭代期间,数据表变动是很常见的,难道每次变动都写一个 migration 文件?虽然 Laravel 的 migration 很好用,堪比 Rails ,但我更喜欢 Symfony + Doctrine 的用法,在 Entity 文件(类似 Laravel 里的 Model 文件)里以注释形式定义各个字段属性:
file
通过 doctrine:schema:update 命令可以自动更新数据库到最新状态,其会比对当前 Entity 属性与数据库的差异,生成对应的SQL语句并执行更新。

这个跟 Laravel 的 Schema change 方法类似,底层都用到了 doctrine/dbal组件。Laravel 里也可以通过 laraveldoctrine项目实现类似功能。

5. 最后

整体觉得 Laravel 虽然强大,但很多特性是牺牲了语义化,或是反直觉的。当然,这些并不阻碍其成为 PHP 社区最火框架。
Laravel 跟 Rails 很像,Rails 社区哲学是约定优于配置, Laravel 也是类似,以上问题本质上不是什么大问题,按照社区约定做法还是挺不错的。

我现在常用的 Symfony3 ,本身也有很多槽点,下期再讲。

好了,以上是我的个人喜好,大家可以扔鸡蛋了。

求关注

最近才开始写公众号,求关注~
file

也可以加我的个人微信号:henter

本作品采用《CC 协议》,转载必须注明作者和本文链接
@henter henter.me
本帖由 Summer 于 6年前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 91
leo

@Summer @overtrue
不用 IDE 这个事情我不认同哈,对于私人项目是用编辑器还是 IDE 我觉得都无所谓,这个不争论。

但如果是商业项目、公司项目不用 IDE 我认为是一种不负责任的表现,除非你真的是智商爆表能保证自己从不打错一个单词的大神。我见过太多用编辑器写出来的代码,PHP 代码各种 undefined,html 代码各种标签没闭合、闭合有问题。

如果有人说可以给编辑器装各种插件来规避这些问题,但本质上还是把编辑器当成 IDE 用了,为何不直接来 IDE,无论如何 IDE 都要比这些编辑器的插件要专业得多。

其实都是鄙视链、优越感在作祟 :)

6年前 评论

我们公司的近二十个 PHP 农民工兄弟都是被要求使用 PHPStorm,并且同版本,同样的格式化配置。 _ide_helper.php 已经加入版本库。设置了同样的 PHPStorm 忽略文件列表。同样的快捷键( Jeffrey Way 是我们的追随的偶像)。同样的命名规范和习惯。等等。

我们的目标是,减少沟通成本、代码冲突、新人快速培训、快准稳的完成任务。终极目标是,早点干完活下班回家!

我们的同事从实习生到10多年经验的都有,大家很开心的一起工作和打农药。

再次感谢 laravel 和 PHPStorm 给我们带来的效率和工作幸福度,以及早点下班陪家人。

6年前 评论
qq332984152 3年前
Summer

来凑凑热闹,我捡一些点发表下自己的拙见,探讨下,一起成长。

1. 关于 IDE 的使用:

2013 年以前,我也一直使用 IDE ,后来看到一篇文章,说大牛一般都用 editor,如 vim 、 emac 或者 sublime。自那以后就一直用着 editor。editor 给我最大的感觉就是:自信。推荐试试看 editor 哈,返璞归真。

2.1 魔法太多

这个是一个是框架的灵活性考虑,另一个,这一种设计理念,叫『最小惊讶原则』(The Principle of Least Surprise),你可以去瞧瞧 The Rails Doctrine - Rails 信条

3.1 Facade 机制

君子不器,没必要被工具束缚到,也许这也是很多大牛为啥不用 IDE 的原因吧。

另外关于框架中的很多 magic,只要把心态调整一下就行:

别太在意内部实现,把这些当成系统提供的功能,物尽其用。

Facade 从实现上确实比较 Hack,但是就其设计目的 —— 编码愉悦度 上来说,兼顾测试和编辑调用,还是非常合理的。

3.2 Blade 模板

关于权限太大的问题,如果你站着框架设计者的角度上看,这是『框架灵活性』的设计理念体现,多人协作如果需要较真,直接写个规范即可。

大部分时候,作为独立开发者,我却认为可以写 PHP 代码这个功能炒鸡好用。你看,框架灵活性对于一个框架多重要,适用各种场景。

4.2 数据表维护

殊途同归,各有好坏。

5. 最后

整体觉得 Laravel 虽然强大,但很多特性是牺牲了语义化,或是反直觉的。

关于这点,我理解不了,Laravel 和 Rails 的出名,都是在于写、读起来很接近自然语言,为何是牺牲了语义化和反直觉,能不能举个例子。

6年前 评论

基本上有名的框架都被你吐槽完了,相信你一定可以写出更完美的框架:grin:

6年前 评论

作为一个用 Sublime Text 写项目的人,表示这些魔法超级好用,实际上并没发现有任何进度,效率上的牺牲,我得靠记忆去记住这些 feature,以便于我在任何一个人的电脑,甚至是服务器上的 vim 改起代码来都是各种顺手,当然了,我也是 PHPStorm 用户,这并不代表哪个好哪个坏,我只是参与一下大家的聊天,哈哈 :laughing:

6年前 评论
henter

发现个bug,文章里包含 blade 模板语法里的 @ 符号时,提交后会自动转义成用户名链接
如文中的 @php 变成了 [@php](https://learnku.com/users/10050)

6年前 评论

基本上有名的框架都被你吐槽完了,相信你一定可以写出更完美的框架:grin:

6年前 评论

除了4.1和4.2不是很理解什么情况,其他的我觉得很中肯,找个方法实在是太难了

6年前 评论

楼主说的有些并不无道理。
但是我们能怎么办,我也很绝望啊。公司就用这个,你不用就得滚蛋。
为了生活,我忍了。

6年前 评论

写的很中肯,个人初级程序员,用laravel也挺长时间了 但是感觉还是没入门,当然我自身有不可推卸的责任,但是同时....laravel太简单了啊 基本都帮你做完了 你就写逻辑好了

6年前 评论
leo

除了 4,其他都赞同,哈哈

6年前 评论
Summer

来凑凑热闹,我捡一些点发表下自己的拙见,探讨下,一起成长。

1. 关于 IDE 的使用:

2013 年以前,我也一直使用 IDE ,后来看到一篇文章,说大牛一般都用 editor,如 vim 、 emac 或者 sublime。自那以后就一直用着 editor。editor 给我最大的感觉就是:自信。推荐试试看 editor 哈,返璞归真。

2.1 魔法太多

这个是一个是框架的灵活性考虑,另一个,这一种设计理念,叫『最小惊讶原则』(The Principle of Least Surprise),你可以去瞧瞧 The Rails Doctrine - Rails 信条

3.1 Facade 机制

君子不器,没必要被工具束缚到,也许这也是很多大牛为啥不用 IDE 的原因吧。

另外关于框架中的很多 magic,只要把心态调整一下就行:

别太在意内部实现,把这些当成系统提供的功能,物尽其用。

Facade 从实现上确实比较 Hack,但是就其设计目的 —— 编码愉悦度 上来说,兼顾测试和编辑调用,还是非常合理的。

3.2 Blade 模板

关于权限太大的问题,如果你站着框架设计者的角度上看,这是『框架灵活性』的设计理念体现,多人协作如果需要较真,直接写个规范即可。

大部分时候,作为独立开发者,我却认为可以写 PHP 代码这个功能炒鸡好用。你看,框架灵活性对于一个框架多重要,适用各种场景。

4.2 数据表维护

殊途同归,各有好坏。

5. 最后

整体觉得 Laravel 虽然强大,但很多特性是牺牲了语义化,或是反直觉的。

关于这点,我理解不了,Laravel 和 Rails 的出名,都是在于写、读起来很接近自然语言,为何是牺牲了语义化和反直觉,能不能举个例子。

6年前 评论

作为一个用 Sublime Text 写项目的人,表示这些魔法超级好用,实际上并没发现有任何进度,效率上的牺牲,我得靠记忆去记住这些 feature,以便于我在任何一个人的电脑,甚至是服务器上的 vim 改起代码来都是各种顺手,当然了,我也是 PHPStorm 用户,这并不代表哪个好哪个坏,我只是参与一下大家的聊天,哈哈 :laughing:

6年前 评论

工具,好用且没有故障,那其实没有必要了解内部细节。

6年前 评论
henter

@overtrue 比较适合单兵作战,快捷方便。可能我比较懒,不想专门去记这些 feature ,还是 IDE 提示来得放心。。:cry:

6年前 评论
henter

@MrJing 不太同意。

6年前 评论
henter

@Summer 之前也用编辑器开发,后来用了 PhpStorm 就无法自拔了。
其实如果是个人项目,我也会用 Laravel 开发,简单灵活。如果是团队,还是要在意 IDE 友好。

别太在意内部实现

可能是职业病,对比较魔法的地方都想了解下细节。

总结下来,用我同事的话说:最终还是这个语言的原罪。

语义化和反直觉,文章里已经都提到了。 :smile:

6年前 评论

表示作为一个从未使用过 IDE 的猿体验不到你的烦恼。感觉全篇幅你所有的槽点都源于你对 IDE 的过度依赖~
仿佛没了 IDE 就不会写代码了 :smile:

6年前 评论
henter

@JokerLinly 真相了,没了 IDE 的确不能愉快的写代码了 = =!

6年前 评论
leo

@Summer @overtrue
不用 IDE 这个事情我不认同哈,对于私人项目是用编辑器还是 IDE 我觉得都无所谓,这个不争论。

但如果是商业项目、公司项目不用 IDE 我认为是一种不负责任的表现,除非你真的是智商爆表能保证自己从不打错一个单词的大神。我见过太多用编辑器写出来的代码,PHP 代码各种 undefined,html 代码各种标签没闭合、闭合有问题。

如果有人说可以给编辑器装各种插件来规避这些问题,但本质上还是把编辑器当成 IDE 用了,为何不直接来 IDE,无论如何 IDE 都要比这些编辑器的插件要专业得多。

其实都是鄙视链、优越感在作祟 :)

6年前 评论

atom 用户路过.
$this->request->get('user_id') 貌似可以request('user_id')``

6年前 评论

确实感觉laravel的魔术方法用了太多,phpstorm不能追踪到。为了用代码提示不停地写phpDoc %>_<%

6年前 评论
Destiny

@happygeek :+1: 同感

6年前 评论

楼主就自已出一个组件 干掉laravel 名字都帮你想好了 就叫php on pails 反正都抄袭rails嘛

6年前 评论
Ryan
6年前 评论

樓主其實比起 PHP 更愛 JAVA 吧 :joy:
對 annotation 情有獨鍾
是不是該轉行呢

6年前 评论
lijinma

herter 是我前同事,是我佩服的几个程序员之一。嘿嘿。

6年前 评论

楼主说的各项都很中肯;我也基本不用laravel;但用ioc容器的框架都不可避免的有ide提示问题;现在想想倒还不如用各种factory去获取实例

6年前 评论

@leo 我用 Sublime 主要两个原因,我在换这个本之前的电脑是 8G,开 PHPStorm 跑一会儿就打字就已经明显开始卡顿了,而那个本用了3年多,所以已经习惯了。另外还有一个原因是从 12 年开始使用 Sublime 开始就觉得它比 PHPStorm 好看好多。:laughing:

6年前 评论
wanglin5517 4年前
secret-500 4年前
secret-500 4年前

樓主一開始就針對 ide 使用上的問題
所以我們是用 "ide" 編程還是用 "框架" 編程?

6年前 评论

V2 上看了一遍,LC 上又仔细看了一遍。
建议您再多用一段时间这个框架之后再来作评论吧。以上很多的观点都是出于熟练程度不够。

6年前 评论
medz

@leo 作为正在叛逃前端的一员,对于你说的标签闭合问题,如果是闭合标签没闭合,我同意,自闭合标签,前端有自己的一套,可能有的公司规定必须闭合,但是在前端圈,尤其是做开源项目的,都会遵循社区约定,自闭合标签不闭合。个人是 sublime text 重度使用者,也用过 notapad++ ,文本编辑器基本满足闭合标签的书写。

6年前 评论
leo

@medz 自闭合标签是需要 /> 结尾的,也算是闭合了,不在我说的情况之列。

6年前 评论

楼主描述的痛点并不是痛点嘛,至少不是我的痛点。而Laravel本身却是基于PHP的生态痛点出发的。
感觉让楼主放弃Laravel的锅最终甩给了IDE,或许是楼主太追求完美了:sweat_smile:

说说槽点。

  1. 你能这样使用Eloquent,说明Laravel已经解决能你这个痛点了
  2. Facade本身是一种设计模式,其目的就是为了隐藏模块的复杂性,如果不想反直觉而一眼看透,你可以选择绕过Facade
  3. 路由这种东西,你习惯了symfony就好,用自己习惯太吐槽别人的习惯,有点讲牵强,毕竟萝卜白菜,各有所爱,就像有人喜欢symfony的风格,所以实现了annotations
  4. 语义化本是Laravel一大亮点,在楼主这却成了痛点,这点我不服:joy:
  5. 最后楼主说,以上问题本质上不是什么大问题,所以这篇文章的本质是给楼主赞人气的吧:)
6年前 评论

为了PHPStorm 花了两万升级 了电脑 从4G直接升到16G, 只有工具好 开发才有效率,不然只有恼羞成怒了

6年前 评论

@leo 更正一点,从不打错一个单词或者记错一个单词跟智商没关系,只跟记忆力有关系。

6年前 评论
leo

@Thinklong

  1. 记忆力是智商的一部分
  2. 打错单词有可能不是记错了,而是手打错了,打错单词能不能快速意识到也是智商的一部分
6年前 评论

我平时用得最多的还是Sublime,吐槽的几点不是很认同。可能是你自己的喜好吧,选适合自己的工具!
我们的项目也在部分转Symfony3,PHP里面只喜欢2个框架 Laravel Symfony

6年前 评论

laravel菜鸟表示猛涨了一波知识!:dog:

6年前 评论

notepad 让你返璞归真 :laughing::laughing::laughing:

6年前 评论
jcc123

一只小白路过~~

6年前 评论
henter

@carlclone 能不能认认真真看帖。。。:joy: :joy:

6年前 评论

混个脸熟~

6年前 评论

@leo
就算记忆力是智商的一部分,但占的比例也是非常小的,智商高的人不一定记忆力都特别好,记忆力特别好的人智商不一定高。逻辑思维敏捷、观察能力和想象能力等好的人一定会有个不错的智商分数。

6年前 评论

laravel 作者用的 sublime

6年前 评论

我们公司的近二十个 PHP 农民工兄弟都是被要求使用 PHPStorm,并且同版本,同样的格式化配置。 _ide_helper.php 已经加入版本库。设置了同样的 PHPStorm 忽略文件列表。同样的快捷键( Jeffrey Way 是我们的追随的偶像)。同样的命名规范和习惯。等等。

我们的目标是,减少沟通成本、代码冲突、新人快速培训、快准稳的完成任务。终极目标是,早点干完活下班回家!

我们的同事从实习生到10多年经验的都有,大家很开心的一起工作和打农药。

再次感谢 laravel 和 PHPStorm 给我们带来的效率和工作幸福度,以及早点下班陪家人。

6年前 评论
qq332984152 3年前

明于术而不拘于术,脱规矩而不违规矩。物尽其用就好,楼主还是太年轻~:smirk:

6年前 评论
jormin

JavaPHP,一路用的是EclipseZendStudio,直到2014年的某一天尝试了SublimeText,从此写代码迷之自信,再到今年,终于被PhpStorm的代码提示敲打了内心的小九九,又换了回来.

虽然SublimeText后来也加入了代码提示功能,但感觉还是比IDE弱好多.

虽然PhpStorm没有SublimeText好看,但架不住有Material Theme UI这个神器啊,尤其在Mac上,写代码写出了开心,写出了幸福~

6年前 评论

这个话题有见仁见智吧,每个人所处的阶段不一样,来讨论同一个话题,能不吵起来,感觉氛围还是很好的!

6年前 评论

评论里不同的看法,确实挺体现他现在的阶段的。

6年前 评论

@zhuzhichao 来一份配置分享?总感觉我的phpstorm主题不是高端灰不怎么爽

6年前 评论
颜⑧

看来ide是最大争论点, migration几乎没有意见。netbeans用户表示稳定才是王道。

6年前 评论
fatrbaby

php玩儿annotations简直是邪道啊。

6年前 评论
nff93

确实,IDE不能提示是个痛点。不过这事儿你在这儿吐槽也无用,可以去twitter给作者留言。。。
另外,在PHP中也找不到跟好的框架可以替代这货了,我能怎么办呢?我也很无奈啊!

6年前 评论

我也是个IDE重度依赖症患者,但就我目前开发的项目来说,用IDE的最大目的倒不是要想要某个方法的代码提示,而是除了写业务逻辑意外,项目有很多其他的规范。

  • 前端sass代码时刻要用stylelint检查代码风格,js代码时刻要用eslint检查, php时刻要用phpcs和phpmd检查.所有的文件多敲一个空格,代码就没法往开发分支上合并。同时还要开着gulp watch。
  • 写完了业务代码还要写unit test, 这时光标放在unit test方法名上右键可以直接运行该test方法。或者在文件名上右键运行整个class的测试代码,岂不快哉。
  • 改之前同事留下来的bug时,效率也高了很多,比dd方便多了。unit test也可以使用断点调试。
  • 项目所有分支命名都是类似于feature/123456789这样的规范,在IDE内置的git中,查找历史分支会方便很多。
  • 更别说复杂的代码结构,要随时随地的翻看找别人的代码。

以上的所有这些东西,通过恰当的配置,都可以在phpstrom里搞定。或许这些东西,sublime通过安装插件都可以实现,但是不知道sublime搭建这样一个环境需要多长时间,反正phpstrom,通过一个已经配置好的setting.jar文件不到两分钟就可以搞起来。或者你说其他的靠其他的辅助软件或者开个终端也可以实现,但是我想说开发个项目,本身就不得不在十几个应用之间不断窗口切换了。所以能少开一个窗口就少开一个吧。

6年前 评论

laravel-ide-helper
只在开发环境添加,生产环境不需要,何乐而不为?最重要的是这个完全解决了对IDE的强度依赖!

6年前 评论

我觉得使用IDE还挺简单快捷的

6年前 评论
chongyi

针对性工作用编辑器,项目开发用 IDE

用 IDE 目的不就是为了拥有不切窗口不用其他工具就能够做到:

  • 细腻手感的调试
  • 快捷安全的重构(PHPStorm 最近滚动更新对优化这块非常给力)
  • 明确可控的跳转(Laravel 无力,不过有很多简单易用的办法解决,比如类似 Model::query(),性能还更好些)
  • 丰富稳定的工具链(Database、Vagrant、Docker、Composer、REST API、Console)
  • 健壮的语言支持(各个版本 PHP 都有对应语法验证,对类、函数、模板甚至数据库的结构浏览器,还有许多细节)
  • 和谐美观的界面(JB 家的主题配色默认已经很完美,也不差各类补充的主题插件)

JB 家的东西除了吃内存,也没什么缺点了。

PS:如果是 JB 家老客户,买 JB 全家桶可以争取到 75 折优惠~~~~(每条 5 毛,记着删掉括号里的内容)

6年前 评论

项目开发还是喜欢ide.
小点儿的修修改改喜欢notepa++

6年前 评论

IDE 的亮点在于 Refactor 的功能非常强大,这是编辑器比较难实现的,除此之外像代码提示的并不是必须的,一般编辑器的代码提示已经能满足需求了

6年前 评论

如果不是为了工作和生活,我不会选择Laravel甚至PHP。但是既然你没办法对抗强奸,就快乐的享受强奸吧。

6年前 评论
皇阿玛 3年前

非常同意楼主观点,Laravel一些机制确实反直觉,需要刻意去学习记忆,用熟了效率很高做项目很快,但是无法否认其反直觉的本质,看楼主的描述像是写过强类型语言的。

6年前 评论

确实,我有时候用laravel很快地做一个网站出来,然后我在思考我究竟写了什么功能,很多laravel都帮我做了,瞬间感觉自己是个废物。所以,现在有空自己去练手写一下原生php和练习写sql语句。

6年前 评论

对于我这样的小白来说,大多数的框架在神坛上,让我不停的去膜拜,啊这个框架好牛掰呀,那个也牛掰,其实在膜拜它们的过程中听到不同的声音也是一种幸福。

6年前 评论

IDE不友好真的是很蛋碎。。

6年前 评论
Kurisu

要不要试试 # Laravel-ide-helper

https://github.com/barryvdh/laravel-ide-he...
虽然好像没看到什么好的中文教程。。。。

6年前 评论

其实楼主发表的意见,我个人开发过程中也时常碰到,所以很能理解。
个人认为:laravel走约定路线,symfony走配置路线。
那么,symfony比较适合企业级,laravel适合个人开发者或者小团队。
目前来说,作为应用层的开发者,我更倾向于laravel的快速迭代开发模式。

6年前 评论

@overtrue Phpstorm比较适合一个项目一个项目单独打开。
我观察过,如果一次打开一个总目录(里面包括N个PHP项目的话),很容易出现内存耗尽的情况。
但是如果单独去打开每个项目,即使是同时多个窗口,也很少出现内存耗尽的情况。

不知道是不是我打开的项目都是很小的原因。。。

6年前 评论

@dingding 何必这样想呢,更好的东西出现就是为了解放生产力。快速创造价值。这个时候你关注的重点就应该是网站的响应,安全,优化等方面。这才是客户需要的东西,也是来体现你价值的地方。

6年前 评论

不能同意更多

针对评论里说不用ide,用个editor,vim,emac等我想说:

用框架不就是为了让写代码更轻松,效率更高吗。既然喜欢用larvel,却抵触ide,这不是很矛盾吗?

本人也算勉强算个资深vimer(高强度用了8年多),但现在工作还是phpstorm,因为大的项目,你需要跟踪阅读代码,就需要ide的提示,一个函数一个函数的点进去。静态语言由于动态语言的一个主要优点不就是类型推断吗,现在php语言本身也在往这方面发展,如果在一个框架里,你调用对象的方法,却不知道有哪些,也不确定这个对象是哪个类,这是多么痛苦。

5年前 评论

@gangbo vim里面也有函数提示和跳转啊 , 而且还是纯键盘操作 , 多好啊 :blush:

5年前 评论

尽管如此,laravel依然值得拥有

5年前 评论

用了2年Yii2,我基本告别模板引擎了,直接用PHP作为模板引擎

5年前 评论
Complicated

@Rekkles 是的,这对刚入门的小白不是很好,停止进步了!对明白原理的大神很好,省事儿

5年前 评论

我写了个精简版的现代化框架,没得那么多黑魔法,https://github.com/Jetea/app/tree/v1.0

5年前 评论

框架是锅、铲子、菜刀而不是主厨。

5年前 评论

支持YII2,高效,稳定,直观。但是laravel社区活跃。

5年前 评论

Laravel 像 Rails ,基于 Rails 的项目有 Twitter、Github、Basecamp 等等,Laravel 在这么多年的实践中有什么类似的项目吗?

4年前 评论

@leo 暗示鄙视新手开发人员,举报了

4年前 评论

我觉得用什么框架什么编辑器只是个人的选择罢了。
希望不要把不喜欢用laravel的个人习惯,带入到工作中并传递给其他同事。
所谓框架就是php代码,框架与框架的区别其实就是php代码写的不一样而已。编辑器纯粹个人眼缘。
我很喜欢用laravel,我很喜欢用phpstorm !

4年前 评论

离开框架,JAVA和Python比php要好太多了,一个是性能方面一个是能优雅的写代码。而这两门语言,在应用上都非常广泛。如果想要在纯粹一点可能就适合C 和 汇编了,在往下走,楼主可以去研究手写机器码了

4年前 评论

你不能因为刀不够锋利不好做菜就不吃饭吧...

4年前 评论
a2691702

团队开发,有个好东西,叫做 “XXX团队后端代码规范(开发必读)”

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!