撸个 symfony4(二)

2020-04-24 11:15:43 浏览数 (2)

目标其实是完成如下的需求,如果有想看源码的,可以看下sf官网出的一个demo。

后面就慢慢完成:

  • 用户可以使用新浪微博或者 QQ 帐号登录。
  • 用户可以投稿,需要填写的内容为“标题” “正文”
  • 用户可以对某篇文章进行评论

在以上的基础上,我们继续具体化我们的需求:

  • 用户的内容都将使用 markdown 格式
  • 评论内容不可超过 140 个字
  • 新闻内容不可超过 5000 个字
  • 标题内容不可超过 70 个字

修改配置文件

按照MySQL,将driver设置为PDO_Mysql。

sf2 or 3的数据库参数是放在一个parameter.ymal中的,但是sf4可以写在service里面。

php配置twig

需要在file type中加上twig文件的类型

创建controller

这里建议使用命令行创建controller。

bin/console make:controller NewsController

这里使用make的时候,可能会遇到小问题

`php bin/console generate:controller`可能会提示这个command不存在,不要方,`composer require symfony/maker-bundle`因为sf4简化了很多,许多bundle需要的时候才会去下载。

创建业务数据模型

新闻页面需要:

  • 标题
  • 文本

要在 AppBundle 里创建它,但是这些数据还需要一个持久层来保存数据,例如之前配置的 Mysql。目前流行的开发方式,无论是 Java 还是 ROR,都会使用 ORM 将数据库字段和类属性关联起来。

Symfony 框架本身并不包含 ORM 工具(严格意义上来说,Symfony 框架,即 FrameworkBundle,不包含 ORM,安全组件,模板引擎,日志工具,邮件组件等一系列工具),只不过 Symfony installer 将一些推荐的,Web 开发常用的工具,都默认安装了。如果你已经知道如何用 Mysql 来存储/获取数据,也不一定非要用 ORM。这里我们为了快速开发,也为了省一些精力,就使用默认提供的 Doctrine2 ORM,它会给我们的开发带来许多便利。

决定了使用 Doctrine,除了定义好 News 类,还需要写配置文件,让 Doctrine2 ORM 将 News 类同数据库某个表关联起来。听起来要做的工作不少,不过且慢,DoctrineBundle 里自带的代码生成工具能让我们的开发再快一点点:

sf4使用orm,需要`composer require orm`.

如果过程中遇到这种,不要方,清除缓存就可以了。

刷新 src/AppBundle 目录,多了一个 Entity 目录,此目录包含了两个文件:News.php 和 NewsRepository.php。

解决:

在.env文件中修改

到了这里,sf2、3、4的区别就有很多了,本来要生成表单的,sf2、3可以直接用curd,它不仅生成了控制器,所有的模板文件也都生成了,并且还生成了表单类。先不管表单类,访问新闻首页 /news/ 试试,没有意外的话,可以看到一个从新建、显示、编辑、删除都完全可用的新闻功能。但是切换到sf4,就不能用curd了,这个方法被弃用了。

需要注意的是:从 Symfony 2.6 开始,模板文件推荐是放在 app/Resources 下的,但是 doctrine:generate:crud 命令还是将模板文件放在了 AppBundle 的 Resources 目录。不仅如此,也不推荐使用 @Template 注解来猜模板路径(官方说法:主要因为性能问题),所以得把生成的 src/AppBundle/Resources 目录移到 app 目录,并且去掉控制器类里的所有 @Template 注解,而直接使用 $this->render 方法。

所以sf4的页面要自己写了,不过待会去看看官网上有没有给什么其他的方法使用。

今天就简单记录下这些吧,牙疼,溜了溜了,逛逛官网去,总觉得这个doctrine寄几还是个小白。

0 人点赞