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

使用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: false
class: AppBundle\Twig\AppExtension
arguments: ['@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的具体使用方法吧, 感觉之前学这块时候太粗糙了

												

symfony简单的博客练习,熟悉具体开发流程的更多相关文章

  1. Django 学习笔记之六 建立一个简单的博客应用程序

    最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...

  2. django初探-创建简单的博客系统

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

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

    上篇django初探-创建简单的博客系统(一)已经记录了Django实现博客的发布的整个过程,接下来继续说明博客标题和内容的显示. 显示博客详细 将博客内容保存到数据库还不是发布博客的终极目的,博客一 ...

  4. 使用Hexo搭建一个简单的博客(二)

    昨天想着用Hexo和github搭一个自己简单的博客,记录一下自己踩过的坑,具体的流程就不重复了,主要参考了一下几篇文章 GitHub+Hexo 搭建个人网站详细教程 使用Hexo+Github一步步 ...

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

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

  6. 跟我一起用Symfony写一个博客网站;

    我的微信公众号感兴趣的话可以扫一下, 或者加微信号   whenDreams 第一部分:基础设置,跑起一个页面-首页 第一步: composer create-project symfony/fram ...

  7. Python学习笔记23:Django构建一个简单的博客网站(一个)

    在说如何下载和安装Django,本节将重点讨论如何使用Django站点. 一 新建project 命令:django-admin startproject mysite # 有的须要输入:django ...

  8. python网络爬虫进入(一)——简单的博客爬行动物

    最近.对于图形微信公众号.互联网收集和阅读一些疯狂的-depth新闻和有趣,发人深思文本注释,并选择最佳的发表论文数篇了.但看着它的感觉是一个麻烦的一人死亡.寻找一个简单的解决方案的方法,看看你是否可 ...

  9. django 部署一个简单的博客系统

    转:https://www.cnblogs.com/fnng/p/3737964.html 写的目的, 加深影响,熟悉开发流程, 开发都是练出来的. 环境 python3.5 windows 7 1. ...

随机推荐

  1. windows10安装docker,运行jhipster-registry

    1.官网下载windows版docker 2.设置bios 3.CMD进入到某个jhipster的工程目录,执行"docker-compose -f src/main/docker/jhip ...

  2. (十) 编写UVC程序

    目录 编写UVC程序 流程简述 11个ioctl函数 查询属性 VIDIOC_QUERYCAP 枚举格式 VIDIOC_ENUM_FMT 查询当前格式 VIDIOC_G_FMT 尝试某种格式 VIDI ...

  3. 关于python环境配置的博客收藏

    使用anaconda的pip来扩展anaconda的库: https://www.cnblogs.com/duan-qs/p/6289339.html 一个.py文件如何调用另一个.py文件中的类和函 ...

  4. Oracle DB 总结(SQL)

    --SQL结构查询语言 数据库定义语言(DDL)用于建立.删除和修改数据库对象 CREATE ALTER DROP TRUNCATE 数据库操纵语言(DML)用于改变数据库表中的数据 INSERT U ...

  5. Linux基础系统优化及常用命令

    # Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ...

  6. 解析中国天气网页面获取七日天气 (Java, Python)

    说明 解析中国天气网的页面,获取七日天气. 使用 htmlparser .这是它的 API 文档. 代码 SevenDayWeather.java import java.io.BufferedRea ...

  7. JavaWeb之html

    html :Hyper Text Markup Language 超文本标记语言 超文本:比文本功能更加强大 标记语言:通过一组标签对内容进行描述的一门语言 html书写规则: 文件的后缀名:.htm ...

  8. iview 非 template/render 标签转换

    在 非 template/render情形下使用 iview,发现除了官方的一些需要注意的点外,还有一些其他需要注意的,这里记录下,防踩坑: 官方说明: 在非 template/render 模式下( ...

  9. Python简单试题

    1,相乘次数 题目要求描述: 一个整数每一位上的数字相乘,判断是否为个位数,若是则程序结束 ,不是则继续相乘,要求返回相乘次数. 例:39 > 3*9=27 > 2*7=14 > 1 ...

  10. java activemq初体验

    1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...