前段时间太忙,导致好久都没有更新博客了,今天抽出点时间来写一篇. 其实这个系列的博客很久没有更新了,之前想好好规划一下,再继续写,然后就放下了,今天再捡起来继续更新. 今天我们来说一下,如何构建自己的 PHP 模版引擎.现在比较流行的 PHP 模版引擎有Twig.Haml.Liquid.Mustache.Plates.Blade以及比较古老的Smarty 其实关于PHP应不应该使用模版引擎,网上也有不少争论,在这里罗列一些使用模版引擎的优点. 安全,比如默认转义输出 可读性好 相关内容可以参考一…
之前我们实现了最简单的echo命令的模版替换,就是将{{ $name }}这样一段内容替换成<?php echo $name ?>. 现在我们来说下其他的命令,先来回顾下之前的定义 输出变量值 {{ }} 表达式的返回值将被自动传递给 PHP 的 htmlentities 函数进行处理,以防止 XSS 攻击. Hello, {{ $name }}! 输出未转义的变量值 Hello, {!! $name !!}! If 表达式 通过 @if.@elseif.@else 和 @endif 指令可以…
自从来到新公司就一直很忙,最近这段时间终于稍微闲了一点,赶紧接着写这个系列,感觉再不写就烂尾了. 之前我们说到,拿到{{ $name }}这样一段内容时,我们只需要将它转化成<?php echo $name ?>这样,就可以识别了,输出相应的变量值. 那就要需要正则匹配{{ $name }},然后替换掉{{和}},分别替换成<?php echo和?>. 但是要想到一个问题,如果我在 view 里写了 php 的代码,其中含有{{ $name }},也会被替换.例子如下: <?…
作为一个框架,我们还没有相应的缓存组件,下面我们就来构建我们的缓存组件. 先来定义一下接口,在 src 文件夹下创建 cache 文件夹,在cache文件夹下创建 CacheInterface.php 文件,其中定义 Cache 相应的接口,其内容如下: <?php namespace sf\cache; /** * CacheInterface * @author Harry Sun <sunguangjun@126.com> */ interface CacheInterface {…
上一篇博客中使用文件实现了缓存组件,这一篇我们就使用Redis来实现一下,剩下的如何使用memcache.mysql等去实现缓存我就不一一去做了. 首先我们需要安装一下 redis 和 phpredis 库,phpredis 项目在github上的地址:https://github.com/phpredis/phpredis .相应的文档也在上面. 先在 src/cache 文件夹下创建 RedisCache.php 文件.在写组件的时候发现我们缺少一个地方去创建一个 Redis 的实例,并且是…
完整项目地址:https://github.com/Evai/Aier Twig 模板引擎 模版引擎 twig 的模板就是普通的文本文件,也不需要特别的扩展名,.html .htm .twig 都可以.模板内的 变量 和 表达式 会在运行的时候被解析替换,标签(tags)会来控制模板的逻辑.   安装Twig 命令行运行: composer require "twig/twig:~1.0" 在services目录下创建Twig.php: <?php /** * Class Twi…
校园失物招领平台开发 --基于laravel框架构建最小内容管理系统 摘要 ​ 针对目前大学校园人口密度大.人群活动频繁.师生学习生活等物品容易遗失的基本现状,在分析传统失物招领过程中的工作效率低下.找回率低.保密性差.管理分散等问题和不足的基础上,提出了WEB模式的失物招领信息管理平台.该平台主要通过失物信息发布和失物领取功能,较好的解决了传统失物招领管理过程中的信息孤岛的缺陷,提高了失物招领的工作效率,减少了师生的直接经济损失,方便了广大师生的日常生活. 本系统采用了LAMP(ubuntu+…
Nancy是一个基于.net 和Mono 构建的HTTP服务框架,是一个非常轻量级的web框架. 设计用于处理 DELETE, GET, HEAD, OPTIONS, POST, PUT 和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应.它提供了一个super-duper-happy-path的交互方式,无需定义各种复杂的路由规则,Nancy会根据你的请求路径自动匹配.Nancy和ASP.NET MVC不同,它更多的是借鉴了Ruby的一些特性. Nancy 的特点: 1. 建立了…
Dubbo是Alibaba开源的分布式服务框架,我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务,比如,在实时性要求很高的应用场景下,可能希望来自消费方(Consumer)的调用响应时间最短,只需要选择Dubbo的Forking Cluster模式配置,就可以对一个调用请求并行发送到多台对等的提供方…
对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序.但是,随着功能模块数量(以及开发维护这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长. SailingEase WinForm 框架为您提供了针对此问题提出的解决方案.在本文中,将对基于SailingEase WinForm 框架的复合应用程序的定义进行解释,并简要说明如何才能构建一个基于 SailingEase WinForm 框架功能的复合应用程序. 传统的单一应用程序 传统的单一应用…