昨天学习了Symfony,照着文档把CRUD做了遍,趁今天有空闲,写下自己的感受。
1、组件化
似乎所有的功能都是已组件的形式引入到框架里面,之前用的CakePHP也是这种思路。
HttpFoundation : Request Response其中就包括session、cookie、$_GET、$_POST的操作
http://symfony.com/doc/current/components/http_foundation.html
2、面向对象
Cookie创建
$response = new Response();
$response->headers->setCookie(new Cookie('username', 'zhangsan',3600));
$response->send();
将相应头对象,cookie本身分离开, 虽然有点麻烦, 但是很清晰的描述了cookie的创建过程。
In PHP, the request is represented by some global variables ($_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, ...)
and the response is generated by some functions (echo, header(), setcookie(), ...).
谈到面向对象,就想起了ThinkPHP,感觉虽然标榜自己是面向对象,但是看过源码和在使用过程中,个人感觉更多的还是在面向过程。
3、文档排版不习惯
之前的MVC框架都是按照文档都是分布在对应的架构层里面,symfony的文档是按照组件划分的, 要查看文档,首先得知道要查找的类容属于一个组件。如果一点不了解框架的设计思路,还真找不到文档在哪里。就拿Cookie 和 Session来说,在CakePHP是单独的两个组件, 而Symfony把他们都加入到了HttpFoundation组件中,找了很久才找到,刚开始还以为是文档不全。
4、数据库操作显得繁琐
从service容器中获取doctrine服务,--》获取对象管理器--》根据类名从对象容器中获取Entity实例--》获取数据对象
5、类似Java框架
感觉Symfony就是Java Spring和Struts的翻版,之前一直在用PHP eclipse开发,但是突然发现,Entity类没有get set 自动生成,手动输入很麻烦。要是有Hibernate反向自动生成就更好了。也是了解了Symfony才知道有doctrine 这样一个ORM框架。在操作Doctrine 时候,工具没有提示功能。
自动生成get、set方法:
参考:https://stackoverflow.com/questions/41044462/symfony-3-auto-generate-boolean-getters-and-setters-isactive-vs-getactive
[root@localhost symfony_test]# php bin/console doctrine:generate:entities AppBundle:Book
Generating entity "AppBundle\Entity\Book"
> backing up Book.php to Book.php~
> generating AppBundle\Entity\Book
[root@localhost symfony_test]#