Symfony2 的优缺点有哪些?
欢迎交流。
回复内容:
主要是提高了代码的抽象级别。相对于简单的,直接暴露底层概念的 PHP 语言,Symfony 提供了一套解决特定工程问题的概念和工具,帮助广大的 Coder 的减少重复性工作。抽象化意味着能用更简洁的东西表达复杂的概念,流程等。Symfony 已经写了一年多了,对我来说的好处,是让我明白了“有各种各样的方式来简练代码”,“简练的代码的诸多好处“,以及”到底简练了什么东西“。
Symfony 一些介绍:
- 路由:能限制 hostname,这就让有大量公共功能的网站可以共用一套代码;URI 识别支持 Reg 检测,让 url 能定义的随心所欲;支持前缀,import,便于模块化。
- Twig模板:这是我最喜欢的一个组件。它提供了一套不同于 php,但非常适合处理复杂网站结构,页面结构的语法。extension 很方便也很强大,通用的操作通过 extension 能很好的表达,比如需要缓存页面的某个模块到 redis ,写一个 ViewExtension,就能在模板里面用一个方法来缓存特定模块了,非常方便,代码也很容易管理。
- composer包管理:让代码的依赖关系变得很清晰。而且现在第三方有很多不错的 bundle,比如抽象 redis 的 snc/redis-bundle,处理图片的 liip/imagine-bundle,第三方登录的 hwi/oauth-bundle 等等等等。随着自己项目的逐渐成熟,也可以把项目对 Symfony 的定制独立出来用 composer 来管理,感觉挺不错的。
- Event,Listener 和 Services:非常方便的全局功能处理。惹人讨厌的是配置起来很麻烦,我用的是 yml 配置文件,为了找对路的语法真是掉了一层皮。
- Doctrine ORM:一个好处是不用去纠结于数据库的细节,而只需仔细的设计需要持久化的对象。对象之间的关系可以自由设计,从生成数据库结构到生成查询语句的过程都不用再操心了。另一个好处是查询的时候,可以不用 sql,dql 这种依赖字符串来表达的查询,而采用对象式,sql 因为是单纯的字符串,整个查询逻辑的控制用代码表达起来很麻烦。
- Form组件:Symfony 提供了 form 生成,提交以及验证的功能。组件抽象了三个方面的东西:formType 来维护需要填写保存的值,formTheme 来定义表单的 html 结构,以及 validation 提供数据验证的功能。这个组件的缺点也很明显,概念太复杂了,如果遇到要自己定义一个 field,简直就是自找麻烦。
- 性能:Symfony 提供了一个极好的组件叫 profile,能以图形化的形式显示各个部分代码执行的时间,消耗的内存,还有数据库查询的语句,查询的行数,用到的索引的。配合这个工具来优化代码,可以让网站跑得飞快。
性能不是问题,优化的空间非常大,但你至少的是常读源代码的这个级别才能让它的性能上得了台面。学习成本高也是个问题,类似于学习 vim 的感觉,熟悉起来非常美好,不然的话...
资料:
- Symfony2 - 标签
但是laravel 有两点不同,第一个语言优美,第二个out of box,它是以用户为中心的,偏向黑盒,比较像苹果的风格,就像苹果手机;
symfony2 偏向白盒,架构清晰灵活,但是非常复杂繁琐~~你需要自己做很多轮子,好处就是轮子都可以很轻松调试,有点像windows的企业版。
symfony2 是非常值得学习的框架,如果你玩了一段时间laravel,需要对内核架构更加深入理解,可以看看symfony2,laravel很多核心概念就是从那里来的。
但是有些设计思想上,symfony反而感觉没有laravel奔放,比如说表单,,symfony搞了一套自以为是非常完整的表单系统,MVC全部打包了。 laravel的表单就很灵活,全部拆分了,甚至后来放弃了V的部分~~普通程序员第一次看到symfony的表单系统常常会吐血身亡。
还有annotation,总感觉是旁门左道,,不正规,现在也没感觉到它的好处,可能是还没用习惯吧。 刚用symfony2做完了三个项目
其中一个使用了sylius bundle,之前使用过codeignitor, yii, zend, drupal, joomla, wordpress做过几十个项目,自从用了symfony2之后,再也不想回到之前的框架里面了,当然drupal8集成了symfony2核心的bundle,一直等待着快快发布。使用symfony2之后让我重新找到了写代码的乐趣,精简,快速,优美,当然有个问题就像上面的一个哥们说的一样,完全对数据库进行了抽象,都需要接触phpmyadmin了,通过doctrine可以自动同步数据库,当然带来的问题是性能方面的问题,无法针对性的进行优化。但是symfony2提供的cache完全可以让网站飞快的运转起来,比起性能更加重要的是能够作出自己想要的东西,性能是之后可以慢慢调试优化的。
另外还有一个对我们来说的一个不是太大的缺点:中文资料相对有限。但是相信通过我们这些点滴的讨论会让资料不断的丰富起来。在做上面的几个项目的时候基本上是在英文社区里面得到的支持。
还有一个问题是,里面的一些概念理解起来比其他的框架稍微有些难度,比如events,services,security,依赖注入,当然这也是强大的背后要付出的一些代价。 优点是强大,缺点是太强大。。。
原来1.0性能不行,据说2.0性能提高很多,可以试试。 优点:像java
缺点:像java 缺点就是太重,学习曲线太陡峭,性能真行不高,中文资料太少,主要的以法文为主,英文其次。另外由于年头早,语法相对陈旧(这就是为啥说laravel好的原因,年头新,用了很多新技术)。
优点就是现成的组件足够多,海量而且开源,重用模式设计的比较精巧,功能足够全面。
第三方bundle的问题是,每个bundle的学习成本也并不低。虽然开源,但实际上比较难改动。而且由于历史原因,很多bundle都有兼容问题。
我现在主要是用sonata系列的组件用于快速建立admin管理平台使用,这部分用熟悉了,能让后台开发效率达到极致,暂时没有发现能够让开发速度更快的可能。需要性能的接口部分使用另一个框架phalcon来处理。 优点:
学会以后强大异常,基本我现在web项目都用 sf2.
缺点:
学习难度存在,三两个项目实战下来才熟悉当中常用组件。
如果学习sf2,官网的Best Practice一定要看,框架自带的实现方式未必最好,比如前端构建我还是喜欢用grunt,AsseticBundle基本不用 没用过sf2, 刚看他的文档,如果用过springMvc 就理解容易看的懂了 优点:
full stack freamwork, powerfully code-generation tools!! based on the premise of convention over configuration.
就我自己的经验来说, Symfony在项目开发上的方便性, 敏捷性和可扩展性, 目前在PHP Freamwork里数一数二, 再加上其强大的第三方插件库和活跃的社区.
缺点:
学习曲线. 要完全搞懂Symfony的设计, 至少花一星期时间研究手册和代码
性能. Symfony1.4和Doctrine1.2结合使用, 高并发下的性能是个问题. 虽然在Symfony2和Doctrine2下已经得到很大的解决.... 但那是另一个话题了.... =_=
PHP最好的框架就是Symfony,很多phper不会用,因为缺少必要的大型web开发的基础知识,比如很多phper连什么是service,event,DI都不知道

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

會話劫持可以通過以下步驟實現:1.獲取會話ID,2.使用會話ID,3.保持會話活躍。在PHP中防範會話劫持的方法包括:1.使用session_regenerate_id()函數重新生成會話ID,2.通過數據庫存儲會話數據,3.確保所有會話數據通過HTTPS傳輸。

SOLID原則在PHP開發中的應用包括:1.單一職責原則(SRP):每個類只負責一個功能。 2.開閉原則(OCP):通過擴展而非修改實現變化。 3.里氏替換原則(LSP):子類可替換基類而不影響程序正確性。 4.接口隔離原則(ISP):使用細粒度接口避免依賴不使用的方法。 5.依賴倒置原則(DIP):高低層次模塊都依賴於抽象,通過依賴注入實現。

在PHPStorm中如何進行CLI模式的調試?在使用PHPStorm進行開發時,有時我們需要在命令行界面(CLI)模式下調試PHP�...

如何在系統重啟後自動設置unixsocket的權限每次系統重啟後,我們都需要執行以下命令來修改unixsocket的權限:sudo...

PHP8.1中的枚舉功能通過定義命名常量增強了代碼的清晰度和類型安全性。 1)枚舉可以是整數、字符串或對象,提高了代碼可讀性和類型安全性。 2)枚舉基於類,支持面向對象特性,如遍歷和反射。 3)枚舉可用於比較和賦值,確保類型安全。 4)枚舉支持添加方法,實現複雜邏輯。 5)嚴格類型檢查和錯誤處理可避免常見錯誤。 6)枚舉減少魔法值,提升可維護性,但需注意性能優化。
