从框架走向无框架
我已经用PHP开发了大约8年的业余爱好了。 在2009年,我select了codeigniter,从那以后,我没有设法开发一个单一的项目。
我发现它使我慢下来试图找出如何修改它,以我想要的方式工作,如果我在纯PHP中工作,我会知道,或者我将能够快速find一个片段。
我试过CodeIgniter,Kohana和Symfony。 我喜欢易用性(而且我也开始使用教条作为一个ORM,它极大地加快了我的数据库工作),但是我发现项目花费了3-4倍于纯PHP的时间。 当我找不到解决scheme来解决我之前在纯PHP中解决的问题时,我感到无聊和沮丧。
有没有人从使用框架回到没有框架的方法。 有没有什么像一个基本的安全框架(防止XSS,过滤张贴的数据,提供清洁function用于数据库)? 我认为像这样的东西比我们的全面的框架更有利于我。 我认为学习使用框架已经教会了我很多,但我更乐意使用自己的代码。
当前版本的PHP5包含许多您正在寻找的安全框架,作为标准库的一部分。
- 使用filter_input_array来声明性地清理从外部进入的东西。
- 通过带有参数化SQL的 PDO访问数据库,以防止SQL注入攻击。
- 使用以下PHP设置,使您的网站更能抵御会话固定和cookie盗用:
- session.use_only_cookies (防止您的会话令牌泄漏到URL中)
- session.cookie_httponly或
httponly
属性session_set_cookie_params() (防止脚本读取兼容的浏览器中的会话cookie) - 更多的build议和维基百科上提供的PHP示例代码。
- 你也可以在setcookie()中使用
httponly
属性。
- 新的HTTP和HTML5function不需要基本的模板和标题设置 :
- HTTP严格的传输安全 (有助于防止WiFi漏洞)
- X-Frame-Options (限制网页embedded,防止networking钓鱼)
- HTML5 IFrame沙箱属性 (沙盒第三方广告/徽章/video。已经在WebKit中。可能至less部分在Firefox 11中实现)。
- 内容安全策略 (Firefox 4的新安全框架,与沙盒属性互补,现在也在Chrome中实现)。
如果您接受HTML作为input,我build议您抓取HTML Purifier ,并通过filter_input_array设置中的FILTER_CALLBACK行来调用它。 其基于白名单的安全input方法是XSS的第一道防线。
据我所知,PHP没有提供防止跨站请求伪造的机制 ,但我相信Google可以帮助你。 如果您想实施自己的保护, OWASP安全性备忘录包含一个部分。
出于好奇,我决定也开始寻找独立的组件,这是我迄今为止发现的:
模板:
- PHP模板inheritance (普通PHP加模板inheritance)
- TWIG (Django / Jinja2 / Liquid- style语法,包括autoescape和sandboxing。编译为caching的PHP速度。)
- Dwoo (一种速度更快,function更强大,支持Smarty的 PHP5-ish后继者,包括现有Smarty模板的兼容性系统)。
东西我还没有正确地看着:
- 路由调度(到目前为止只能findRouteMap和Net_URL_Mapper ,谢谢,cweiske)
- ORM (以防止光秃秃的PDO不是你的东西)
根据您的声明,您已经使用PHP作为业余爱好,以及您的个人资料声明“慢慢到达”,这似乎是一个学习曲线问题。 您似乎没有深入和广泛的经验:a)理解如何在框架所强加的结构内工作; b)您因此无法从框架的效率中受益。
我敦促你坚持下去。 回到video教程的开始。 find并阅读其他人的代码,直到你理解它。 从头开始构build项目 – 简单地开始,并添加function。 按照论坛,在阅读回复之前试图自己回答问题。
我已经在各种平台上进行了将近20年的专业编程,而且我仍然花了我一段时间来适应CI。 但现在,我不会回到纯粹的PHP(对于我自己的项目),除非我有一个足够的网站,它暴露了量化的性能问题(思考Twitter)。
我不相信框架……我曾在其中的许多框架。
讨厌MVC框架的原因:
1)代码膨胀,我购买帮助我开发的高级课程。 如表单类或SQL类。
2)我相信MVC框架不容易移植,尤其是在使用依赖pipe理器时。
3)我相信你实际上用MVC框架编写更多的代码,那么如果你不得不使用一个有很多有用的类来处理authentication等的样板。
4)大多数框架本身也只适应一个或两个数据库。
我会build议find一个表单框架与身份validation和文本编辑器和像madoo +电子邮件类的SQL框架…
你的应用程序的90%总是forms,sql和ajax CLASSES – 其余的只需要时可以获得
我是一个极简主义者,我为在应用程序中执行代码而不做任何事情的想法而斗争,以防万一我需要它,对我来说不起作用。
有了这些丰富的经验,你必须拥有自己喜欢的图书馆,亲自挑选并devise自己的简单框架。 框架或没有框架(以及哪个框架)取决于手头项目的种类,没有手套适合所有。 所以我强烈build议,如果你觉得现有的框架正在减慢你的速度,花一些时间,并拿出一个框架,根据你的需要工作。
Zend框架真的超级。 您可以使用尽可能多的或尽可能less的。 它的所有编码在PHP和开源,所以你可以只是破解它,使你自己的。 不同的组件不像其他框架那样依赖于其他组件。
您可以使用Zend的一些组件构build一个简单的框架,而不会有任何问题。
看看吧!
对于基本的安全性,我使用自定义filter方法来包装我的superglobals 。 它的语法需要一些习惯,但是比PHP filter_var()API更简单,并且不允许你去清理:
$_GET->text("inputvar") or $_POST->name["field"]
它也允许内联$ _REQUEST-> sql()转义。 但是对于数据库工作,请继续使用参数化的SQL,或者select您的DAL / ORM。
我做了一天ToroPHP的研究,发现它相当不错。 这是一个针对RESTful应用程序的极简主义框架。 这使得可以保持服务器端代码模块化,而不必处理任何框架的膨胀。
我不知道什么是困扰你,但codeigniter是一个伟大的框架。它有很好的文档,因为许多人使用codeigniter你会发现所有的帮助在其文档,或论坛或stackoverflow.I已经在许多框架( Codeigniter,CakePHP,Zend,Spring 3.0,Ruby on Rails),但是我必须说codeigniter是最好的文档。codechiter中有很多东西可以自动处理,而且不必担心安全性。 在核心PHP上工作就像重新发明轮子。 那么最重要的是,从核心转到框架将需要大量的工作,一旦你习惯了,你就会开始热爱它。同样,Ruby on Rails也是一个很好的框架,一旦你知道它的来龙去脉,你可以有双倍的速度。
我知道你的感受。 我开始4〜5年前在PHP(我来自delphi,哈哈),并开始在纯粹的PHP。 我回来的是一个“CMS面板”,只读了所有的表格字段,然后创build表格。 过了一段时间,我对PHP框架的知识有了一些了解,但是我首先尝试了CakePHP,并且不喜欢,之后,进入Yii,我认为它非常直观,易于使用(它是Gii生成器,它的function非常强大)。 我试过了Symfony,ZF2,Laravel,Yii2-Beta和RAD的一些框架,但是我还是没有像框架之前那么快。
发生了,我开发了我自己的框架(当然,不是我有一天醒来,说“我要创build一个新的框架”,与时间发生)。 我知道这是一个糟糕的糟糕的做法和“车轮改造”的举措,但是,现在我开发项目的速度要快得多(仅限PHP以上)。
由于它的代码是一个完整的MESS,所以我在一个月前开始重新构build我的框架,现在它使用composer php,按照PHP框架之间存在的通用规则,是MVC。
为什么我正在重新制定? 因为如果有人需要修理我的一个项目,它不会是另一个世界的事情。
所以我理解你。
我的build议是,准备你的工具(称之为框架,预设应用程序或任何人的名字),并以你感觉更好的方式使用它,但仍遵循一些共同的规则(像MVC,“易于模块化”你可以在发生故障时更换。