这里搭建一个简单的博客系统作为练习,之后再完成学校任务搭建一个表白墙,

使用htmlpurifier和parsedown来搭建前端,所以需要先安装这两个第三方包,必须要弄一个composer的国内镜像,不然安装的实在是太慢了,

composer config  repo.packagist composer https://packagist.phpcomposer.com   局部更新的方法,全局更新可能会出问题

更新之后使用 composer require "包的名称,如"composer  require erusev/parsedown "^1.6" -vvv“,之后便可以进行使用

Markdown是一种轻量级语言,用来将文本输出成html代码的,先对HTMLpurilier进行学习吧

.导入文件这里没有必要,因为已经下载下来了,

.获取默认配置 $config = HTMLPurilier_Config::createDeafult();

.生成过滤器实体 $html_purilier =   new HTMLPurilier($config);

过滤html代码,防止xss攻击 $clean_html = $html_purilier->purify($dirty_html);

下面说明一下具体配置

$config->set('配置属性的名称',value,a=null)    具体有哪些属性等用的时候去官网查看就行

第一步先编写Markdown类,用于过滤并生成html代码的类,代码这里不放了,书写完成之后需要在services之中进行注册,不然无法使用

# the slugger service needs a public alias for getting it from # the container when loading doctrine fixtures
slugger:                             symfony3.4注册方法     alias: AppBundle\Utils\Slugger     public: true

接下来进行twig模板扩展的编写,注意一下这是官网上给的方法,abstractExtension继承了之前的\Twig_Extension类,所以这里是一样的相当于
<?php
/*** Created by PhpStorm.* User: 亦清* Date: 2019/3/13* Time: 20:06*/namespace AppBundle\Twig;
use AppBundle\Utils\Markdown;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;//放置头一个扩展的类class AppExtension extends AbstractExtension
{/*** @var Markdown*/private $parser;public function __construct(Markdown $parser){$this->parser = $parser;     //使用markdown来初始化,用于后面的过滤
    }/*** 将父类的注释都继承下来* {@inheritdoc}*/public function getFilters(){      //twig模板过滤return [new TwigFilter('md2html',[$this,'markdownToHtml']),];}/*** 过滤函数* @param string $content* @return string*/public function markdownToHtml($content){$this->parser->toHtml($content);return $content;}/***{@inheritdoc}*/public function getName(){return "app.extension";}}

编写完成之后进行注册

    app.twig_extension:   #注册扩展appExtension扩展public: falseclass: AppBundle\Twig\AppExtensionarguments: ['@markdown']tags:-{name: twig.extension}

接下来书写Entity实体,post和category这两个,这里简单起见,他们字段都不多,其中post的category和Category是多对一的关系,需要设置外键进行连接,其他的没有什么

之后使用doctring:generate:database  创建数据库 再使用doctrine:scheam:validate检查annoation是否正确,之后使用doctrine:generate:entities AppBundle产生实体,再然后使用

doctrine:schema:update 将数据实例化到数据库当中去就行了,比较简单这里就不放代码了,

接下来使用DoctrineFixturesBundle来进行初始化数据库的操作,使用之前需要使用

composer require --dev doctrine/doctrine-fixtures-bundle

来载入这个bundle,至于这个模块的使用,这里不进行说明了,官方文档有,我有一篇文章进行了说明

在此之后,需要对其进行初始化,

初始化操作分为两个category文件和post文件,这里除了之前说的,还有两个组件需要使用

use Symfony\Component\DependencyInjection\ContainerAwareInterface;   //容器组件,将东西注入到容器当中,之后便可以使用
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\Finder\Finder;    //symfony目录组件,遍历组件,取出文件内容

这里使用Container是为了将三个文件当中的内容获取出来,之后使用symfony的Finder文件目录来将其中的内容获取出来,用来初始化数据库具体用法如下

/*** @var ContainerInterface*/private $container;/*** 构造方法构建一个容器,* @Param ContainerInterface $container*/public function setContainer(ContainerInterface $container = null){$this->container =$container;}  
public function load(ObjectManager $manager){    $posts = array(        ['title' => '第一讲:Symfony3的简介,开发环境与版本控制', 'cate' => 'symfony3-practis'],        ['title' => '第二讲: 最佳实践与第一个Symfony应用', 'cate' => 'symfony3-practis'],        ['title' => '第三讲: 创建初步用户系统', 'cate' => 'symfony3-practis'],    );    $post_file_path = $this->container->getParameter('kernel.root_dir').'/data/fixtures/posts';  //用容器的get方法获取文件目录    $find = new Finder();                       //使用symfony目录对象遍历组件进行文件遍历,    $find->files()->in($post_file_path);    $i = 0;    foreach($find as $file){  //遍历文件获取其中内容,放入到posts当中        $posts[$i]['content'] =$file->getContents();        $i++;    }    foreach($posts as $post){                           $product = new Post();        $product->setTitle($post['title']);        $product->setContent($post['content']);        $product->setCategory($this->getReference('category-'.$post['cate']));         //设置其分类,使用getReference        $manager->persist($product);        $manager->flush();    }}

之后使用命令

php bin/cosole doctrine:fixtures:load  进行数据库初始化操作,之后在mysql查看是否正确初始化数据

之后 需要书写twig模板,定义各个页面之间的关系,这里先写一下twig的具体使用方法吧, 感觉之前学这块时候太粗糙了


转载于:https://www.cnblogs.com/eenio/p/10533000.html

symfony简单的博客练习,熟悉具体开发流程相关推荐

  1. [技术博客] 小程序前端开发流程——用实例介绍

    目录 主题 前端功能 UI实现 后端接口对接 作者:李大 主题 本文的目标在于简单介绍一下我们在开发小程序时的前端开发流程. 前端功能 前端的功能在于给数据提供一个合适的容器,并提供用户-界面-后端的 ...

  2. SpringBoot+Vue快速搭建简单个人博客系统之后端

    我是markerhub作者的一名粉丝,最初在markerhub公众号关注了博主,去B站白嫖了博主的基于SpringBoot+Vue开发的前后端分离博客项目完整教学的视频教程,看一遍跟着老师敲一遍,有的 ...

  3. lighthouse_Laravel中的GraphQL做得正确:如何在一个简单的博客中设置Lighthouse

    lighthouse by Oliver Nybroe 由Oliver Nybroe Laravel中的GraphQL做得正确:如何在一个简单的博客中设置Lighthouse (GraphQL in ...

  4. django初探-创建简单的博客系统(一)

    django第一步 1. django安装 pip install django print(django.get_version()) 查看django版本 2. 创建项目 打开cmd,进入指定目录 ...

  5. [Django快速开发1]搭建一个简单的博客系统(1)

    系列文章目录 Django快速开发0快速搭建环境并得到django项目的hello world 文章目录 系列文章目录 前言 从Django的模型层开始书写 定义文章模型: 使用脚本向sqlite3中 ...

  6. 一个最简单的博客园文章密码暴力破解器-python3实现

    一个最简单的博客园文章密码暴力破解器-python3实现 我之前想写路由器的密码暴力破解器,我手上只有极路由,发现极路由有安全限制,只能允许连续10密码错误,所以我改拿博客园练手. 博客园的博客有个功 ...

  7. python密码破解工具_一个最简单的博客园文章密码暴力破解器-python3实现

    一个最简单的博客园文章密码暴力破解器-python3实现 我之前想写路由器的密码暴力破解器,我手上只有极路由,发现极路由有安全限制,只能允许连续10密码错误,所以我改拿博客园练手. 博客园的博客有个功 ...

  8. SpringBoot+Vue博客系统---后端接口开发

    Java后端接口开发 从零开始搭建一个项目骨架,最好选择合适,熟悉的技术,并且在未来易拓展,适合微服务化体系等.所以一般以Springboot作为我们的框架基础,这是离不开的了. 然后数据层,我们常用 ...

  9. java毕业论文_【毕业论文】基于java的博客网站设计与开发毕业论文(word文档)

    <[毕业论文]基于java的博客网站设计与开发毕业论文.doc>由会员分享,可免费在线阅读全文,更多与<[毕业论文]基于java的博客网站设计与开发毕业论文(word文档)>相 ...

最新文章

  1. 达梦数据库中服务器日志的开关
  2. mongodb导出导入实例记录
  3. canva画图 图片居中裁剪_Canvas裁剪图片(截选框可拖拽)
  4. python小波变换尺度函数_Python图像处理(17):pyWavelet
  5. awstats 简单日志分析
  6. WM中的OutLook开发和操作
  7. 三角函数公式【转载】
  8. oracle以32位运行,Oracle在 32位系统上运行突破sga1.7g的方法
  9. 特殊年份(java)
  10. iOS8设置应用图标红点的权限问题
  11. MSU 出品的 H.264 编码器比较 (2011.5)
  12. Android攻城狮—TextView实现跑马灯
  13. 电磁场仿真——绘制电场线和等势线
  14. CentOS安装Nacos后,输入默认用户名和密码nacos/nacos,提示“用户名或密码错误”
  15. 网口压线顺序_网线水晶头接法口诀顺序及接法详细步骤
  16. 痛并快乐着,我的程序世界
  17. webstorm直接运行js
  18. 华为帐号助力金融服务体验 中信银行成鸿蒙生态先行者
  19. rand()函数详解
  20. 《用户体验设计:100堂入门课》20190917

热门文章

  1. Coda 2.7.7 强大的Web编辑器
  2. ​表面修饰阳离子磁性/表面螯合金属离子磁性二氧化硅微球/镱离子掺杂二氧化硅微球​
  3. java异常说法正确的是什么意思_以下关于Java异常说法不正确的是( )。
  4. 【初次见面,请多关照】
  5. 自动化测试中的验证码问题
  6. NOIP2014提高组A.石头剪刀布
  7. 不同浏览器JS获取浏览器高度和宽度
  8. 一款运行在Mac平台上的浏览器:Vivaldi浏览器 for Mac
  9. 题目:输入某年某月某日,判断当日是星期几? 提示:1900年1月1日为星期一
  10. 莱布尼兹三角形(C++)