V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sheldondai
V2EX  ›  PHP

吐槽下 php 几个框架,都是实际项目中用过的,欢迎有使用经验人的喷

  •  3
     
  •   sheldondai · 2014-08-20 18:07:25 +08:00 · 12654 次点击
    这是一个创建于 3530 天前的主题,其中的信息可能已经有所发展或是发生改变。
    首先说下轻量经的框架
    thinkphp和ci是我使用的过的两个轻量级框架,但这两个框架缺点都很明显,就是简陋,
    这两个框架的bug都很多,我自己都碰到不少。tp是我刚毕业时用的,用了两年,也和tp的作者一起工作过,算是深度用户了。
    1.tp和ci的开发和测试估计都没有在nginx下测试过,我在nginx跑,ci的路由有bug。
    2.ci还有个明显的设计问题,而且竟然存在了很久,那就是在 index.php里面,当是production环境就
    会关闭错误信息error_reporting(-1);这个错误一直存在了很久,最近才被fixed,真是奇怪这么显明的问题,竟然存在这么久。
    3.tp和ci都只能做小项目,对多人合作方面,测试方面都考虑的很少。
    4.开发过还遇到过若干小bug,这里就列举了,有些问题记不太清了。
    5.这两个框架的中文文档都做的是一级棒。

    再说说yii框架吧,yii框架最让我叫觉的我就想就是它的gii吧,分分钟做出个简单的后面管理demo,
    不过我吐槽的就是这个,gii生成的代码使用的是widget,这个widget把view层和数据层紧紧的包裹在一起,不只是前端开发人员修改困难,就是后端开发也要查半天文档了才能修改。
    当时发现好不容易修改好一个,下一个看似简单的需求,又得查半天文档才能修改好。

    举个例子。列表页面一般都是zii.widgets.grid.CGridView这个widget,当你对生成的代码暗自高兴的时间,一个需求来了,列表中的某一列的label需要动态显示。但是你看代码,zii的label是死的,不能写php代码,为了这个需要我只能改了框架里的CGridView,yii里面的代码大量使用了eval,所以在view层写代码会很难维护。类似这种
    'url' => 'Yii::app()->createUrl("topic/create", array("id"=>$data->id,"type"=>1, "rtype"=>0))',代码会大量充斥在view层。当在大量细小的需要过来时,我现在当初使用gii省下的时间都被gii收回去了,
    最后只能回归传统的foreach 出列表页。
    yii还有问题就是代码风格混乱,有的地方缩进8个字符,有的4个, yii2在这方面已经改正了。


    我心中的理想的开发大中型项目的框架是这样的
    1. 代码风格在PSR-2以上。
    2. 框架本身是低耦合的,并且用框架写的业务代码也是代耦合的。
    3. 在console下也正常运行。
    4. 友好的支持php_unit,要友好的支持php_unit,上面的2,3是必须的,框架本身也有做单元测试。
    5. 一些基本的功能模块以bundle或module的形式提供。
    47 条回复    2014-09-06 11:09:48 +08:00
    trimleo
        1
    trimleo  
       2014-08-20 18:11:57 +08:00   ❤️ 3
    一大波laravel粉丝即将赶来。。
    欢迎关注phphub.org~ 立志于打造积极向上的 PHP & Laravel 开发者社区.
    atan
        2
    atan  
       2014-08-20 18:12:09 +08:00
    试试laravel吧,上手后还是很爽的
    sheldondai
        3
    sheldondai  
    OP
       2014-08-20 18:16:18 +08:00
    laravel粉这多,由于公司原因,一直没用过,不过看到larave用了很多sf2的组件,laravel应该是在sf2做的减法 吧
    regmach
        4
    regmach  
       2014-08-20 18:25:22 +08:00
    ci上手太快,没了
    yii的前端控制和lz所说差不多,crud还是难维护,relations在简单sql语句下很快,复杂sql语句下很多人对于还是准手写
    lijinma
        5
    lijinma  
       2014-08-20 18:27:16 +08:00
    laravel 可以试试,

    其实只要是用 Composer 来管理的框架,整体来说都还是比较低耦合,而且有 phpunit test。

    推荐你尝试下:

    Slim Micro Framework,这种简单的框架你可以看看噢。

    全部都是用 composer 来搭建,私有的使用包使用 Composer satis
    sheldondai
        6
    sheldondai  
    OP
       2014-08-20 18:32:24 +08:00
    @lijinma sy2有用过没,看了下,它的第三方bundle很多,可以下很多工作量。
    sheldondai
        7
    sheldondai  
    OP
       2014-08-20 18:36:28 +08:00
    @regmach 国内用yii的真多,我是真没体会到yiii的真谛
    wangdaimishu
        8
    wangdaimishu  
       2014-08-20 18:46:27 +08:00
    Yii 的 GridView 有其两面性吧,缺点就像你说的,跟前端配合的时候不方便,虽然这个组件的可定制性超强,不过始终不如传统那种在里面一点一点混写 html + php 来的直观。

    但是真正用熟以后你就会发现这货好强,个人感觉是 Yii 的杀手锏组件之一,以至于用习惯了的某一天发现自己不会处理排序了(跟他搭配用的 Sort 组件专门干这事)。

    我现在看框架都会先看看提不提供类似的组件,不提供的一般都不用,没有类似的组件开发后台功能真心没效率。
    wangdaimishu
        9
    wangdaimishu  
       2014-08-20 18:48:46 +08:00
    @sheldondai 必须推荐 Yii2啊,Yii2的 GridView 组件更强了(主要得益于 php5.4以后的匿名函数功能)
    denghongcai
        10
    denghongcai  
       2014-08-20 19:14:18 +08:00   ❤️ 2
    CI的路由有BUG这就黑的太奇怪了吧,明明是你NGINX的Rewrite没配好
    whuhacker
        11
    whuhacker  
       2014-08-20 19:53:14 +08:00
    Yii 的代码缩进啥时候有 4 字符 8 字符的问题?不一直都是用 tab 的么。。
    我觉得 Yii 的好处在于灵活,简单的小项目用 Gridview 等组件分分钟搞定,复杂的也可以自己做定制。

    Yii2 就更好了,project template 都分 Basic 和 Advanced
    master
        12
    master  
       2014-08-20 19:57:32 +08:00 via iPhone
    怎么没人提Yaf
    wangdaimishu
        13
    wangdaimishu  
       2014-08-20 20:01:07 +08:00   ❤️ 1
    @master Yaf 这种就不要拿出来说了,这货就是个用 C 写的 VC 调度器。
    拼性能,phalcon不比他差,但是人家功能甩他好几条街。
    kfll
        14
    kfll  
       2014-08-20 20:05:21 +08:00 via Android
    又看到说自己用 nginx 跑 php 的了
    barbery
        15
    barbery  
       2014-08-20 20:07:00 +08:00
    phalcon啊,亲。。。phpunit跑测试完全木压力,命令行下跑也是杠杠滴
    lazyphp
        16
    lazyphp  
       2014-08-20 20:27:40 +08:00
    楼主吐槽这么多,为什么不自己写一个呢?
    angeloce
        17
    angeloce  
       2014-08-20 20:39:26 +08:00
    没人说说thinkphp呢, 国产里确实不错的框架, 但是缺点也确实多了点, 风格不统一的配置, 孱弱的中间件和模版.....
    aWangami
        18
    aWangami  
       2014-08-20 20:46:37 +08:00
    新人搭个话~
    目前才入手TP不久,发现这货会屏蔽掉php的原始错误信息,还有有时候一层一层的库内调用堆栈其实对调试帮助不太(个人觉得噢),不知道是不是我调试模式没有配置好..发现如果对它不是太了解的话,类似C语言少了分号却报一些比较莫名的错误,摸不到头脑。其实调试模式可以做得更好..
    其他方面的话,目前还在探索中
    regmach
        19
    regmach  
       2014-08-20 20:51:46 +08:00
    @sheldondai Yii好上手啊,思路清晰也基本够用
    @wangdaimishu Yii的后端定制能力很不错(废话,原本就是PHP框架啊).widget的前端定制还是感觉有点麻烦---个人之见,其他的也基本没用过---逻辑复杂是还是要手写好多的
    aWangami
        20
    aWangami  
       2014-08-20 20:55:10 +08:00
    对了,还吐槽一句,TP是不是不支持mysql的datetime和timestamp,我看OneThink都是用int字段类型来表示的..
    wdlth
        21
    wdlth  
       2014-08-20 20:58:17 +08:00
    CI的路由怎么会在Nginx有问题?要么是Rewrite设置不对,要么是FastCGI的PATH_INFO分离设置不对。
    生产环境屏蔽报错很正常,不然可能会泄露信息。

    试了试HHVM对各框架的支持度还不错,不过调试就比较麻烦。
    GTim
        22
    GTim  
       2014-08-20 20:58:36 +08:00
    在我眼中,tp已经是一个复杂的框架了.

    我用php这么久,一开始觉得zf很好,然后觉得yii很好,然后觉得tp很好,最后,我只追求一个结构了
    sheldondai
        23
    sheldondai  
    OP
       2014-08-20 21:05:50 +08:00
    @master 用的不多的没敢提
    sheldondai
        24
    sheldondai  
    OP
       2014-08-20 21:09:38 +08:00   ❤️ 1
    @wdlth 生产环境需要做的是display_error=false,而不是关闭error_reporting.
    baocaixiong
        25
    baocaixiong  
       2014-08-20 21:11:22 +08:00
    主要感觉yii的Gridview基本相当于重学了一个yii语言了。
    maddot
        26
    maddot  
       2014-08-20 21:14:29 +08:00
    "zii的label是死的,不能写php代码"。

    对这个有疑问
    楼主是指每一列的列名吗?“zii的label是死的”指的是zii不对“header"进行eval?显然对于列名这是不必要的,因为列名不需要用每一行的值来确定,也就是它的动态化与一行的数据是没关系的。
    sheldondai
        27
    sheldondai  
    OP
       2014-08-20 21:15:53 +08:00
    @barbery phalcon性能优秀而且设计上也很赞,不过要是框架本身有bug的话,对我这种对php扩展开发不怎么熟悉的人算是黑盒了。
    sheldondai
        28
    sheldondai  
    OP
       2014-08-20 21:30:34 +08:00
    @maddot 不是说的header。你可以看zii/widgets/grid/CButtonColumn.php里面的renderButton方法。
    wdlth
        29
    wdlth  
       2014-08-20 21:32:38 +08:00
    @sheldondai 问题是php.ini不是所有的环境都能改的,比如虚拟主机,有的地方也限制ini_set。
    maddot
        30
    maddot  
       2014-08-20 21:42:17 +08:00
    @sheldondai

    可以的吧,不需要不去修改框架代码,看了一下代码,默认的button的LABEL是写死了的,但是还是可以覆盖的

    foreach(array('view','update','delete') as $id)
    {
    $button=array(
    'label'=>$this->{$id.'ButtonLabel'},
    'url'=>$this->{$id.'ButtonUrl'},
    'imageUrl'=>$this->{$id.'ButtonImageUrl'},
    'options'=>$this->{$id.'ButtonOptions'},
    );
    if(isset($this->buttons[$id]))
    $this->buttons[$id]=array_merge($button,$this->buttons[$id]);
    else
    $this->buttons[$id]=$button;
    }
    maddot
        31
    maddot  
       2014-08-20 21:51:54 +08:00
    不好意思,看得不够仔细,你是指button的LABEL不能EVAL,但是具有相同行为的Button需要不同的LABEL的需求还是比较个性化的,所以要求你自己去继承框架代码来实现,没有什么好批评的吧,YII的一大优点是他的组件机制让你能方便改变框架的各种功能行为
    mahone3297
        32
    mahone3297  
       2014-08-20 22:11:06 +08:00
    lz说的问题,确实存在。
    我这边用symfony,你说的问题,我看过symfony相关的文档,symfony提供的解决方案是,可以overwrite。
    我认为symfony和yii应该还是比较类似的,laravel应该也差不多。
    codingpp
        33
    codingpp  
       2014-08-20 22:33:35 +08:00
    laravel大法好,退yii保平安
    jarlyyn
        34
    jarlyyn  
       2014-08-20 23:45:48 +08:00
    觉得yii最好用的是缓存和url rewrite.
    gii做过两个项目后就不用了。
    konakona
        35
    konakona  
       2014-08-21 04:27:30 +08:00 via Android
    @trimleo 关注。
    jianghu52
        36
    jianghu52  
       2014-08-21 09:07:47 +08:00
    在我这种只会用cakephp+smarty的人来说,你们说的东西都太高端了。
    ksc010
        37
    ksc010  
       2014-08-21 09:17:25 +08:00
    用tp几个月 了 不爽的就是它的模版系统
    lizhijun
        38
    lizhijun  
       2014-08-21 09:31:38 +08:00
    不得不说CI的中文文档和社区支持很给力
    Rabbit52
        39
    Rabbit52  
       2014-08-21 11:42:14 +08:00
    laravel 的性能还是有点捉急,symfony2 的曲线太陡,Phalcon 如上有黑盒的赶脚~
    ren2881971
        40
    ren2881971  
       2014-08-22 08:34:01 +08:00
    tp和ci 都简单用过。 觉得ci不错~ 野生phper路过。。
    summer_charlie
        41
    summer_charlie  
       2014-08-22 21:27:38 +08:00
    楼主可以使用 Laravel , 开发从此如此愉快, 打下广告 -> http://phphub.org/
    Actrace
        42
    Actrace  
       2014-08-23 09:08:08 +08:00
    PHP本质上已经是很优秀的框架了,不知道在这上面再套一个框架有啥意义。
    顶多,就是按照个人需求把一些常用业务打包起来复用以提升类似需求的开发速度,除此之外我想不出还有其他可以优化的地方。
    反倒是现有的框架,把太多细节封装起来,但是又只能应对固定的需求,实际上是批量拉低了PHP程序员的技术水平,拖延了成长时间。
    有一些活,该了解的细节还是要了解的,就算在日常工作中有办法忽略那些细节用于提升效率,但是至少你在茶余饭后跟朋友们聊天的时候可以拿出些东西来侃侃~
    vigoss
        43
    vigoss  
       2014-08-23 10:35:55 +08:00 via iPhone
    @Actrace 我不知道为什么用了框架了就不了解细节了。不想了解细节不用框架也不会了解。技术的提升和你用什么框架没关系。不用框架写带码,你难道连数据库都不封装一下?
    justplaymore
        44
    justplaymore  
       2014-09-04 15:13:00 +08:00
    symfony2
    composer
    TangMonk
        45
    TangMonk  
       2014-09-04 21:06:15 +08:00
    @sheldondai 最近在研究drupal8, 随便研究了下sy2, 但是感觉好复杂的样子,搞不懂。。官网的tutorial看了之后也是一头雾水。。。
    shanqiu
        46
    shanqiu  
       2014-09-06 00:57:19 +08:00
    怎么没人提kohana,yii基础上发展出来的框架,感觉这个非常灵活,比tp、ci好用,没yii那么庞大,但是性能不是问题。
    我现在写项目都是用kohana+bootstrap
    crabRunning
        47
    crabRunning  
       2014-09-06 11:09:48 +08:00 via Android
    屌炸天的initphp,不服来辩
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   875 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 21:46 · PVG 05:46 · LAX 14:46 · JFK 17:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.