让复杂的互动变得更简便易行,基于laravel框架构建最小内容管理体系

EpiiAdmin

EpiiAdmin
php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js,
让复杂的相互变得更简便易行!Phper快捷搭建交互性平台的支付框架

www.30064.com 1

Laravel框架简介:

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web
Framework)。它可以让您从面条一样纷纭扬扬的代码中解脱出来,帮您构建一个周密的网络APP,而且每行代码都得以不难、富于表明力。

Laravel框架简介:

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web
Framework)。它能够让你从面条一样纷繁扬扬的代码中抽身出来,帮您构建一个到家的网络APP,而且每行代码都足以不难、富于表明力。

高校失物招领平台支付

EpiiAdmin是基于Thinkphp5.1+Adminlte3.0+Require.js的很快搭建通用管理主旨或用户大旨的开发框架。

Laravel框架教程:

诸多PHP开发者在开展项目支出的时候,第一时间就会想到Laravel,如果您也正想学学这一个优雅凝练的Laravel框架,不妨能够从以下6个学科入手,从基础到实战项目都包罗了:

Laravel框架教程:

诸多PHP开发者在开展项目支付的时候,第一时间就会想到Laravel,如果你也正想学学这几个优雅凝练的Laravel框架,不妨可以从以下6个学科下手,从基础到实战项目都蕴含了:

——基于laravel框架构建最小内容管理体系



解决了怎么问题。

Php在全速支付web应用上优势很扎眼,尤其是php7.2在性能上大幅度提升,技术的不断更新,新的框架不断发出,使得众多应用层框架来不及更新。大家在遇到新品类时,总是徘徊用旧的框架去付出,仍然用到新的框架去做。选取之后很很多少人挑选了用旧框架,为何?因为其他一个系统总要求管理中心,或用户基本,而这么些界面越多的是前台框架。很多Phper想使用新型的框架(laravel或者thinkphp5.1)去付出,但因前端而止步,不得不为了进程,用旧的系统去改。EpiiAdmin
正是为明白决那么些题材。本框架尽管依照tp5.1,但很不难改为laravel。

【Laravel 5.1 基础教程】

该科目从环境布置开首,将路由、控制器等着力知识点进行讲解和实施,力求让学习者通过投机做试验来更快上手
Laravel 开发,也能在付出的历程中体味 Laravel
的艺术感。并且在终极会教大家通过30分钟搭建一个娇小玲珑博客,让我们对Laravel基础知识举行追思通过推行深化纪念并巩固学习。

www.30064.com 2

【Laravel 5.1 基础教程】

该科目从环境安插起头,将路由、控制器等为主知识点进行教学和举行,力求让学习者通过投机做试验来更快上手
Laravel 开发,也能在付出的长河中体会 Laravel
的艺术感。并且在终极会教大家经过30分钟搭建一个精美博客,让我们对Laravel基础知识进行回顾通过实践深化纪念并加固学习。

www.30064.com 3

摘要

本着目前大学校园人口密度大、人群活动频仍、师生学习生活等物品简单丢失的焦点现状,在分析传统失物招领进程中的工作成效低下、找回率低、保密性差、管理分流等题材和不足的底蕴上,提议了WEB方式的失物招领音信保管平台。该平台紧要通过失物音讯揭穿和失物领取成效,较好的解决了观念失物招领管理进度中的音信孤岛的症结,进步了失物招领的工作功效,收缩了师生的第一手经济损失,方便了大规模师生的平时生活。
本系统接纳了LAMP(ubuntu+Apache+MySQL+php)作为支出环境,后端php框架使用了现阶段风行的laravel框架,完全根据MVC的设计方式。选取国产开源的响应式HTML5支出框架AmazeUI作为前端视图框架,可以很好地适应移动端页面布局。

重在词:高校;失物招领;新闻表露;内容管理体系;php;laravel;MySQL;AmazeUI


特性

  • 多管理为主同在,可快速搭建后台管理,用户基本等,按照项目工作需求飞速搭建。
  • 为Php后台程序员提供最飞速的前端完毕效益,简单的html代码即可完结复杂的互相体验,大约无需JS代码。
  • 本框架不含有其余应用层模块,纯粹干净。
  • 全盘的前台组件
    • Adminlte3
    • Bootstrap4
    • Bootstrap-table
    • Layer
    • Jquery
    • Require.js
    • Jquery-addtab.js
    • jquery-validate.js
    • 其它
    • 上述组件虽多,但都已使得集成在系统中,后台人员无需了然其应用办法。
  • 支撑多种大旨。
  • 宏观的科目和文档。

【Laravel完毕用户注册登录】

本项目基于 Laravel 5.1
达成完整的网站用户注册和登陆系统。通过该品种的付出,逐步熟悉优雅的 PHP
框架 Laravel。本课程难度一般,适合对PHP后台开发感兴趣以及想学习入门
laravel 的同学。

www.30064.com 4

【Laravel完结用户注册登录】

本项目基于 Laravel 5.1
达成完全的网站用户注册和登陆系统。通过该品种的付出,逐步熟识优雅的 PHP
框架 Laravel。本学科难度一般,适合对PHP后台开发感兴趣以及想学学入门
laravel 的同学。

www.30064.com 5

目录

在线演示

EpiiAdmin演示

【Laravel 5.1 火速搭建用户认证连串】

该类型基于 Laravel 5.1 的 Auth
系统和第三方插件火速搭建一套要旨的涵盖:登录/注册/图片验证码认证/忘记密码等效能的用户认证系统。

www.30064.com 6

www.30064.com 7

【Laravel 5.1 快捷搭建用户认证系统】

该类型基于 Laravel 5.1 的 Auth
系统和第三方插件疾速搭建一套基本的涵盖:登录/注册/图片验证码认证/忘记密码等效果的用户认证种类。

www.30064.com 8

www.30064.com 9

一、引言

1.课题切磋背景及意义

2.种类可行性分析

在线文档

EpiiAdmin在线汉语文档

【Laravel 5.1 制作简便相册】

品种从界面、数据库的总体规划开首,使用 Laravel 5.1
一步一步的搭建一个简单的 bootstarp
风格瀑布流相册。适合已经学习过laravel基础知识的同室作为项目练手,巩固知识点。

www.30064.com 10

【Laravel 5.1 制作不难相册】

品类从界面、数据库的一体化统筹初阶,使用 Laravel 5.1
一步一步的搭建一个简单的 bootstarp
风格瀑布流相册。适合已经学习过laravel基础知识的同班作为项目练手,巩固知识点。

www.30064.com 11

二、系统须要分析

1.业务流程分析

2.用户体验分析

仓库首页

https://github.com/epaii/epii-admin

码云(gitee)仓库首页

https://gitee.com/epii/EpiiAdmin

注:添加虚拟主机并绑定到EpiiAdmin/public目录

【Laravel 项目实战:仿和讯今日头条Web应用】

该类型带你已毕全体的仿博客园博客园的门类,学习运用 PHP 最热的 Web 框架
Laravel 构建利用。在类型实战中,入门并控制 Laravel 的着力用法,学习
HTML、CSS、JavaScript、PHP 和 Bootstrap 等文化,同时履行 Git
工作流、Gulp 前端工作流等开发方法。

www.30064.com 12

【Laravel 项目实战:仿微博天涯论坛Web应用】

该类型带您兑现整体的仿腾讯网天涯论坛的花色,学习应用 PHP 最热的 Web 框架
Laravel 构建利用。在档次实战中,入门并控制 Laravel 的宗旨用法,学习
HTML、CSS、JavaScript、PHP 和 Bootstrap 等学问,同时推行 Git
工作流、Gulp 前端工作流等开发方法。

www.30064.com 13

三、系统模块设计

1.功用模块

2.用户界面

让复杂的互动变得更简便易行,基于laravel框架构建最小内容管理体系。环境必要

1. PHP >= 5.5.0 (推荐PHP7.1版本)
2. Mysql >= 5.5.0 (需支持innodb引擎)
3. Apache 或 Nginx
4. php需支持宽展
     pdo_mysql
     MBstring
     CURL

【Laravel大型项目体系教程】

本项目经过动用 Laravel5.1 和 AmazeUI
完成一个多用户博客系统,一步步落到实处各种功用模块,学习 PHP 的品种支付及
Laravel 框架的使用。本项目要求驾驭 PHP
基础知识。本课程难度非凡,适合对PHP后台开发感兴趣以及想入门 laravel
的校友。

www.30064.com 14

www.30064.com 15

【Laravel大型项目种类教程】

本项目通过运用 Laravel5.1 和 AmazeUI
达成一个多用户博客系统,一步步兑现各样作用模块,学习 PHP 的类型开发及
Laravel 框架的行使。本项目须要了然 PHP
基础知识。本学科难度适中,适合对PHP后台开发感兴趣以及想入门 laravel
的同桌。

www.30064.com 16

www.30064.com 17

四、大旨职能的技巧完成

1.花费条件

2.技巧框架

3.数据库设计

4.MVC设计格局

5.焦点代码完毕

6.测试及操作表达

Demo 截图

www.30064.com 18

最后

如上6个科目,都足以在实验楼上展开在线学习,不但有详细的开发步骤和代码讲解,更有在线的费用环境,可以随时跟着教程下手操作学习。

最后

如上6个科目,都足以在实验楼上进展在线学习,不但有详实的开销步骤和代码讲解,更有在线的支付环境,可以每天跟着教程下手操作学习。

五、总结

课程文档目录

www.30064.com 19

EpiiAdmin在线中文文档

六、参考文献


引言

1. 课题琢磨背景及意义

博士由于率领的事物较多,活动多,而且平常往返于不相同的位置,由此很简单生出物品遗失的情形,而当前我们高校又缺乏一套卓有成效的可以扶持学员寻找失物的系统。考虑到大学生普遍上网,而且高校网络覆盖率高,
那么就经过网络这一便捷急速的章程来贯彻一个失物招领系统,优化失物招领业务,使得失物招领管理清晰化、透明化,便于操作,易于管理。通过本系统,拾主可以经过这几个平台揭橥新型的招领启事以文告大家,而失主可以因而那些平台寻找和关系拾主。并且只即使网站的登记用户,就足以揭橥管理小说、留言,那样不光财产上的损失幸免了,还增强了人与人以内的调换。所以说开发这么些失物招领平台,定会大大有利高校内广大师生的活着,不必再为丢失寻找物品那类琐事干扰,真正地让技艺劳务于生存。

2.连串可行性分析

  • 技能方向

    应用祥和的ubuntu
    linux作为服务器环境,Apache处理客户端与服务端的通讯,MySQL数据库存放用户新闻和发布的篇章、留言,php作为后端语言,已毕动态页面处理,再添加简洁优雅的响应式前端开发框架,可以付出出符合须要的管住连串。

  • 经济可行性

    网站平台的开发及后期的运营保证所需的人力物力很少,并且可以配备在该校的服务器上,由网络服务中央的工作人士统一保管。

  • 社会动向

    在校园里,大家日常来看这么一幕,一位同学在热水房门口一回三回寻找,然后口里说着,怎么又不见了吗?,一边不甘心的再找一回。又可能是这么一幕,“寻物启事——宿舍号,丢失物品,最终再诅咒一下这一个捡拾物品不还的人。”现有失物招领处工作繁琐且作用低,因而支付失物招领管理连串是更加要求的。


系统必要分析

1、业务流程

业务流程分析可以帮忙开发者领会该业务处理进程,发现和处理系统调查工作中的错误和疏漏。业务流程分析是透过业务流程图来展开,即用有些确定的标记及连线来表示某个具体事情处理进度。

本系统实际的业务流程如下图所示:

www.30064.com 20

工作流程.PNG

2、用户体验分析

用户体验是现行产品开发进程中国和南美洲常体贴的一个上边,大家开发出一款产品或者提供一项服务,其最后面向的是不讲究或不在乎技术层面的普遍用户,由此在界面友好性、直观性、易于操作性方面不可能不加以考虑。本失物招领系统根据下述原则举办:

  • 实用性:系统以用户须要为对象,以方便用户采用为尺度,充裕考虑实际操作的各项细节,使得普通用户在打开页面的第一眼即能对操作流程有明晰的敞亮。真正构建起一个为师生服务的阳台,为用户的在线失物招领查询公布提供方便。
  • 高安全性:在布置中,将足够考虑网络软、硬件方面的各类安全措施,保证用户数据新闻安全。比如用户存放在数据库的账号密码接纳php的哈希加密,即便数据库败露,看到的也将是一堆乱码。
  • 可维护性:网站的布署性要求方便维护,文件目录及代码结构清晰。
  • 可扩张性:网站的统筹以方便未来的扩充和种类伸张为对象,系统需要可以方便升级,方便添加功用模块。

系统模块设计

1.成效模块

本管制体系关键可以落实用户注册、用户(管理员)登录、首页突显、失物招领的篇章发布、留言板、后台管理,
以及标签管理等几大模块的法力:

  • 用户注册:本效率重假如贯彻对用户音信的注册管理
  • 用户(管理员)登录:本功效紧要完成用户(管理员)登录的功力
  • 首页模块:本模块重即使对失物招领文章的来得效果、添加效率、查看详情功效及各模块入口
  • 留言板模块:紧如若促成用户(管理员)留言作用,以供用户举报
  • 后台管理:用户音讯保管、失物招领文章管理、留言板留言管理、管理员信息保管、标签管理

本系统重点功能结构如下图所示:

www.30064.com 21

职能结构图.PNG

2、用户界面

  • 注册页面:本界面主要收集注册用户的音讯,然后存入系统数据库
  • 报到页面:本页面依据登录用户的音讯和档次举行认证登录
  • 首页:本页面显示用户所揭橥的失物招领的稿子,以及小说的竹签
  • 留言板页面:本页面彰显历史留言和添加留言的版块
  • 用户新闻页面:本页面展现当前报到的用户的音信及发表的稿子管理
  • 管住页面:本页面是管理员对本网站各类版块举行田间管理的可视化操作页面

着力功用的技巧落成

1、开发条件

网站的地点开发条件使用lamp(即Linux+Apache+MySQL+PHP)。lamp是一组常用来搭建动态网站依然服务器的开源软件,本身都是独家独立的次序,然则因为常被放在一块儿利用,拥有了尤其高的包容度,共同整合了一个有力的Web应用程序平台。lamp的具有开发工具都是开源软件,随着开源时尚的蓬勃发展,可以预感lamp会是鹏程web开发的主流,并且鉴于其零费用、学习资料多,自然成为自己的首选开发条件。

2、技术框架

后端的php框架拔取了海外流行的开源框架——laravel,也是称呼“最精简、优雅的php
web开发框架”,基于此可以长足、高效地构建一个web
APP,Laravel的靶子是给开发者创立一个安心乐意的支付进程,并且不捐躯应用的成效性。刚起先读书php开发没多短时间,对php的有的框架精晓什么少,在csdn上见到一篇小说《php开发框架流行度名次:laravel居首》,才晓得有laravel这么一个框架,并且其文件目录、代码结构清晰,基于MVC的设计形式,对初学者较友好,故接纳了此框架,本篇课程设计很大程度上也终究我对laravel框架的就学实践吧。php的使用框架众多,如国产的thinkPHP框架在境内也使用者甚广,前期曾品尝使用thinkPHP来支付,其布局代码简单直接,易于上手,但在代码规范性方面毁誉参半,不符合初学者养成杰出的编码习惯,故弃之。

上边就对laravel框架体系布局作简要介绍。

Laravel被称之为“全栈”式框架,因为它亦可处理从网络服务到数据库管理、HTML生成的成套事情,垂直集成的web开发条件给开发者提供了更好的体会。开发人士可以通过命令行工具,生成和管理Laravel项目条件。
Laravel带有一个名为Artisan的美好的命令行工具,可以用它来生成框架代码和数据库架构,Artisan可以处理从数据库架构迁移到资源和安顿管理的任何事情。

laravel项目利用composer来创造(Composer是PHP中用来治本器重(dependency)关系的工具。你可以在祥和的门类中声称所依靠的外表工具库(libraries),Composer会帮您安装这么些依赖的库文件)。在linux终端中实践:

$ composer create-project laravel/laravel –prefer-dist web 5.1

就会在/home目录下创办一个名为web的连串文件夹,指定的laravel版本为5.1
。其目录结构如下图所示:

www.30064.com 22

071625168621849.png

上边是逐一文件夹和文件的骨干介绍:

顶级文件夹 作用
app 包含了站点的controller(控制器),models(模型),views(视图)和assets(资源)。这些事网站运行的主要代码,你将会花费大部分的时间在这些上面。
bootstrap 用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。
这个文件夹是外界唯一可以看到的,是必须指向你web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可以用来存放任何可以公开的静态资源,如css,JavaScript,images等。
vendor 用来存放所有的第三方代码,在一个典型的laravel应用程序,这包括larceny源代码及其相关,并含有额外的预包装功能的插件。

总的看,/app是其焦点部分,/app文件夹的详细音信如下:

www.30064.com 23

071625258005786.png

上边是事无巨细介绍:

文件及文件夹 作用
/app/config/ 配置应用程序的运行时规则、 数据库、 session等等。包含大量的用来更改框架的各个方面的配置文件。大部分的配置文件中返回的选项关联PHP数组。
/app/config/app.php 各种应用程序级设置,即时区、 区域设置(语言环境)、 调试模式和独特的加密密钥。
/app/config/auth.php 控制在应用程序中如何进行身份验证,即身份验证驱动程序。
/app/config/cache.php 如果应用程序利用缓存来加快响应时间,要在此配置该功能。
/app/config/compile.php 在此处可以指定一些额外类,去包含由‘artisan optimize’命令声称的编译文件。这些应该是被包括在基本上每个请求到应用程序中的类。
/app/config/database.php 包含数据库的相关配置信息,即默认数据库引擎和连接信息。
/app/config/mail.php 为电子邮件发件引擎的配置文件,即 SMTP 服务器。
/app/config/session.php 控制Laravel怎样管理用户sessions,即session driver, session lifetime。
/app/config/view.php 模板系统的杂项配置。
/app/controllers 包含用于提供基本的逻辑、 数据模型交互以及加载应用程序的视图文件的控制器类。
/app/database/migrations/ 包含一些 PHP 类,允许 Laravel更新当前数据库的架构并同时保持所有版本的数据库的同步。迁移文件是使用Artisan工具生成的。
/app/database/seeds/ 包含允许Artisan工具用关系数据来填充数据库表的 PHP 文件。
/app/lang/ PHP 文件,其中包含使应用程序易于本地化的字符串的数组。默认情况下目录包含英语语言的分页和表单验证的语言行。
/app/models/ 模型是代表应用程序的信息(数据)和操作数据的规则的一些类。在大多数情况下,数据库中的每个表将对应应用中的一个模型。应用程序业务逻辑的大部分将集中在模型中。
/app/start/ 包含与Artisan工具以及全球和本地上下文相关的自定义设置。
/app/storage/ 该目录存储Laravel各种服务的临时文件,如session, cache, compiled view templates。这个目录在web服务器上必须是可以写入的。该目录由Laravel维护,我们可以不关心。
/app/tests/ 该文件夹给你提供了一个方便的位置,用来做单元测试。如果你使用PHPUnit,你可以使用Artisan工具一次执行所有的测试。
/app/views/ 该文件夹包含了控制器或者路由使用的HTML模版。请注意,这个文件夹下你只能放置模版文件。其他的静态资源文件如css, javascript和images文件应该放在/public文件夹下。
/app/filters.php 此文件包含各种应用程序和路由筛选方法,用来改变您的应用程序的结果。Laravel 具有访问控制和 XSS 保护的一些预定义筛选器。
/app/routes.php 这是您的应用程序的路由文件,其中包含路由规则,告诉 Laravel 如何将传入的请求连接到路由处理的闭包函数、 控制器和操作。该文件还包含几个事件声明,包括错误页的,可以用于定义视图的composers。

3、模型-视图-控制器(MVC)

/app文件夹下有七个子目录:models/,views/和controllers/。那表达laravel遵从MVC架构形式。那就是威逼将输入到体现逻辑关系的“业务逻辑”与图形用户界面(GUI)分开。就laravel
web应用而言,业务逻辑平常由像用户,作品那样的数据模型组成。GUI只是浏览器中的网页而已。MVC设计形式在web开发领域中很盛行。

MVC形式包涵多个零件:

  • 模型(model)
  • 视图(view)
  • 控制器(controller)

一个卓越的laravel应用程序蕴涵上边提到的MVC组件,如下图:

www.30064.com 24

071626088464369.png

laravel的响应流程

当与Laravel交互时,浏览器发送一个请求,web服务器收到到请求并且传给Laravel路由引擎。Laravel路由接收到请求,然后重定向给基于路由的URL情势的熨帖的决定器类方法。然后决定器类接管。在某种情状下,控制器会马上呈现出一个视图,它是一个被转换成HTML并送回浏览器的模版。更宽泛的动态网站,控制器与模型交互,那是一个PHP对象,它意味着应用程序(如用户、博客小说)中的一个元素,并负担与数据库举办通讯的。调用模型后,控制器则显现最后视图(
HTML,CSS和图像),并赶回完整的网页到用户的浏览器。Laravel促进了那般的定义——模型、视图和控制器,应通过存储这几个要素在不一致的目录中的单独的代码文件中来维系非常的独立性。这就是Laravel目录结构发挥了出力。

​ ——laravel文档

4、数据库设计

接纳phpmyadmin来对MySQL数据库举办可视化操作,在MySQL中先成立名为web的数据库,然后配置laravel的数据库配置文件/config/database.php如下:

‘mysql’ => [
​ ‘driver’ => ‘mysql’,
​ ‘host’ => env(‘DB_HOST’, ‘localhost’),
​ ‘database’ => env(‘DB_DATABASE’, ‘web’),
​ ‘username’ => env(‘DB_USERNAME’, ‘root’),
​ ‘password’ => env(‘DB_PASSWORD’, ‘sheng’),
​ ‘charset’ => ‘utf8’,
​ ‘collation’ => ‘utf8_unicode_ci’,
​ ‘prefix’ => ”,
​ ‘strict’ => false,
],

MySQL数据库中留存的表如下图所示:

www.30064.com 25

选区_015.png

有些表的验证:

articles:存放用户发表的失物招领小说

article_tag:发表的篇章的价签

migrations:php做动迁数据时暴发,与主导作用无关

tags:用户标签

users:存放用户账户音讯

5、主题代码已毕

web程序的代码一般都较多,如若把持有的代码均放置小说里,事无巨细,一一表达,是不具体的,故只会采用宗旨的工作逻辑部分代码,配以画龙点睛的解释。在前者方面,使用了AmazeUI响应式开发框架和jQuery的JavaScript库,与风行的bootstrap类似,故对前者的div,css等体制也不做过多表达。

根本解释的要害包罗以下内容:

  • 路由管理
  • 用户管理,如用户注册、修改音讯、锁定用户等
  • 文章管理,如发表小说、修改小说等
  • 标签管理,小说会有一到四个标签
  • 数据库管理,如迁移、填充数据等
  • Web表单验证
  • Blade模版引擎
  • 分页处理
  • 平安处理

laravel使用blade模板引擎,故视图文件均须以xxx.blade.php方式命名,web/resources/views/文件夹下的目录结构如图所示:

www.30064.com 26

选区_017.png

网站输入文件首先会加载的视图文件是layouts/defalut.blade.php:

<!DOCTYPE html>
<html>
<head lang=”zh”>

<meta charset="UTF-8"/>
<title>校园失物招领平台</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="viewport"
      content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="format-detection" content="telephone=no"/>
<meta name="renderer" content="webkit"/>
<meta http-equiv="Cache-Control" content="no-siteapp"/>
<link rel="alternate icon" type="image/x-icon" href="{{ asset('img/favicon.ico') }}"/>
<link rel="stylesheet" href="http://cdn.amazeui.org/amazeui/2.7.1/css/amazeui.min.css"/>
<link rel="stylesheet" href="{{asset('css/custom.css')}}">
<script src="//cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>

</head>
<body>
<header class=”am-topbar am-topbar-fixed-top”>

<div class="am-container">
    <h1 class="am-topbar-brand">
        <a href="/">校园失物招领平台</a>
    </h1>
    @include('layouts.nav')
</div>

</header>

@yield(‘main’)

@include(‘layouts.footer’)

<script
src=”//cdn.bootcss.com/jquery/3.1.0/jquery.min.js”></script>
<script
src=”;
</body>
</html>

内部amazeui前端框架文件以及jQuery文件均是存放在cdn网络上,无需在本地加载,精简了网站文件夹的协会。

  • asset(‘img/favicon.ico’) 会生成
    http://localhost:8000/img/favicon.ico
  • asset(‘css/custom.css’) 会生成 <link media=”all”
    type=”text/css”rel=”stylesheet”
    href=”http://localhost:8000/css/custom.css”>,其中的
    img 和 css 文件夹是放在 public 目录下的,public
    目录是种类的资源文件夹
  • @include(‘layouts.nav’) 会包含 app/views/layouts/nav.blade.php 文件
  • @yield(‘main’) 用于模版继承

多数的视图文件都会一而再default.blade.php的沙盘框架,例如index.blade.php:

@extends(‘layouts.default’)

@section(‘main’)

<div class="am-g am-g-fixed">
    <div class="am-u-md-8">
        <!-- 循环输出文章 -->
        @foreach ($articles as $article)
            <article class="blog-main">
                <h3 class="am-article-title blog-title">
                    <a href="{{ URL::route('article.show', $article->id) }}">{{{ $article->title }}}</a>
                </h3>
                <h4 class="am-article-meta blog-meta">
                    由 <a href="{{ URL::to('user/' . $article->user->id . '/articles') }}">{{{ $article->user->nickname }}}</a> 发布于 {{ $article->created_at->format('Y/m/d H:i') }}  标签:
                    <!-- 输出标签 -->
                    @foreach ($article->tags as $tag)
                        <a  href="{{ URL::to('tag/' . $tag->id . '/articles') }}">{{ $tag->name }}</a>
                    @endforeach
                </h4>
                <div class="am-g">
                    <div class="am-u-sm-12">
                        @if ($article->summary)
                            <p>{!! $article->summary !!}</p>
                        @endif
                        <hr class="am-article-divider"/>
                    </div>
                </div>
            </article>
        @endforeach
    </div>

  • @extends(‘layouts.default’) 会继承
    app/views/layouts/default.blade.php 文件
  • @yield(‘main’)对应 @section(‘main’) 并填充为内部的始末

用户登录表单(在login.blade.php文件中)如下:

  <form action="login" method="post" accept-charset="utf-8" class="am-form">
    <!-- 添加 token 值 -->
    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
    <label  for="email">邮箱:
        <input type="email" name="email" value="{{Input::old('email')}}" placeholder="">
    </label>
    <br>
    <label for="password">密码:
        <input type="password" name="password" value="" placeholder="">
    </label>
    <br>
    <label for="remember_me">
      <input id="remember_me" name="remember_me" type="checkbox" value="1">
      记住我
    </label>
    <br>
    <div class="am-cf">
    <input type="submit" name="submit" value="登录" class="am-btn am-btn-primary am-btn-sm am-fl">
    </div>
  </form>

laravel及多数php框架使用路由(route)来生成URL,处理http请求,用户登录数据的评释也是置身了路由文件里(web/app/route.php):

//post登陆数据
Route::post(‘login’, function()

{
  //数据验证规则
  $rules = array(
    'email'       => 'required|email',
    'password'    => 'required|min:6',
    'remember_me' => 'boolean',
  );
  $validator = Validator::make(Request::all(), $rules);
  //验证通过
  if ($validator->passes())
  {
    if (Auth::attempt([
      'email'    => Request::input('email'),
      'password' => Request::input('password'),
      'block'    => 0], 
      (boolean) Request::input('remember_me')))
    {
      return Redirect::to('home');
    } 
    //账号或密码错误
    else {
      return Redirect::to('login')->withInput()->with('message', array('type' => 'danger', 'content' => 'E-mail or password error'));
    }
  } 
  //数据格式错误
  else {
    return Redirect::to('login')->withInput()->withErrors($validator);
  }
});

//访问主页
Route::get(‘home’, [‘middleware’ => ‘auth’, function()
{
return view(‘home’);
}]);

挂号操作路由:

Route::post(‘register’, function()
{
$rules = [

'email' => 'required|email|unique:users,email',
'nickname' => 'required|min:4|unique:users,nickname',
'password' => 'required|min:6|confirmed',

];
$validator = Validator::make(Request::all(), $rules);
if ($validator->passes())
{

$user = new App\User();
$user->email = Request::input('email');
$user->nickname = Request::input('nickname');
$user->password = Hash::make(Request::input('password'));
if ($user->save())
{
  return Redirect::to('login')->with('message', array('type' => 'success', 'content' => 'Register successfully, please login'));
} else {
  return Redirect::to('register')->withInput()->with('message', array('type' => 'danger', 'content' => 'Register failed'));
}

} else {

return Redirect::to('register')->withInput()->withErrors($validator);

}
});

上边表单验证规则的unique:users,email能有限支撑 users 表中的 email
字段是绝无仅有的,例如当输入已存在的 email 时,会师世谬误提示:

www.30064.com 27

选区_013.png

若注册成功就会跳转到登录页面,并交给成功的提示:

www.30064.com 28

选区_014.png

用户公布失物招领启事,即作品披露模块,在数据库中对应三张表:articles 、
tags 以及
article_tag,每篇小说会有一到八个标签,每个标签会有一到多篇小说。模型文件/app/Article.php和Tag.php、User.php的中央代码如下:

www.30064.com,User.php:

<?php

namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as
AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as
CanResetPasswordContract;

class User extends Model implements AuthenticatableContract,
CanResetPasswordContract
{

use Authenticatable, CanResetPassword;

/**
 * The database table used by the model.
 *
 * @var string
 */
protected $table = 'users';

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = ['name', 'email', 'password'];

/**
 * The attributes excluded from the model's JSON form.
 *
 * @var array
 */
protected $hidden = ['password', 'remember_token'];
//模型关联
public function articles()
{
    return $this->hasMany('App\Article');
}

}

一个用户会有多篇作品。

Article.php:

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes; //使用软删除 trait

class Article extends Model
{

use SoftDeletes;

protected $fillable = ['title', 'content'];

public function tags()
{
    return $this->belongsToMany('App\Tag');
}

public function user()
{
    return $this->belongsTo('App\User');
}

}

一篇文章会有几个标签并属于一个用户。

Tag.php:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Tag extends Model
{

use SoftDeletes;

protected $fillable = ['name'];

public function articles()
{
    return $this->belongsToMany('App\Article');
}

}

一个标签会有多篇小说。

此小说编辑器使用了markdown编辑器,markdown简洁优雅的排版格式可以使文章样式更雅观(可能也亟需一定的学习成本)

向数据库中添加文(Gavin)章,要用到MVC中的control了./web/app/http/Controllers/ArticleController.php的为主代码如下:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Markdown;
use Validator;
use App\Article;
use Auth;
use App\Tag;
use Redirect;

class ArticleController extends Controller

******
******

  //保存文章
public function store(Request $request)
{
    $rules = [
    'title'   => 'required|max:100',
    'content' => 'required',
    'tags'    => ['required', 'regex:/^\w+$|^(\w+,)+\w+$/'],
    ];
  //数据校验
    $validator = Validator::make($request->all(), $rules);
    if ($validator->passes()) {
        $article = Article::create($request->only('title', 'content'));
        $article->user_id = Auth::id();
        $resolved_content = Markdown::parse($request->input('content'));
        $article->resolved_content = $resolved_content;
        $tags = explode(',', $request->input('tags'));
          //添加 summary
      if (str_contains($resolved_content, '<p>')) {
            $start = strpos($resolved_content, '<p>');
            $length = strpos($resolved_content, '</p>') - $start - 4;
            $article->summary = substr($resolved_content, $start + 3, $length);
        } else if (str_contains($resolved_content, '</h')) {
            $start = strpos($resolved_content, '<h>');
            $length = strpos($resolved_content, '</h>') - $start - 4;
            $article->summary = substr($resolved_content, $start + 4, $length);
        }
        $article->save();
      //处理标签
        foreach ($tags as $tagName) {
            $tag = Tag::whereName($tagName)->first();
            if (!$tag) {
                $tag = Tag::create(array('name' => $tagName));
            }
            $tag->count++;
            $article->tags()->save($tag);
        }
        return Redirect::route('article.show', $article->id);
    } else {
        return Redirect::route('article.create')->withInput()->withErrors($validator);
    }
}
//展示文章详情
public function show($id)
{
    return view('articles.show')->with('article', Article::find($id));
}

地方代码完成了保留文章和展现小说的政工逻辑,保存小说时证实 tags 用了
regex 正则表明式来表明标签是或不是用逗号分隔。

用户修改已经披露的稿子的为主代码如下:

@extends(‘layouts.default’)

@section(‘main’)
<div class=”am-g am-g-fixed”>
<div class=”am-u-sm-12″>

  <h1>Edit Article</h1>
  <hr/>
@if ($errors->has())
<div class="am-alert am-alert-danger" data-am-alert>
  <p>{{ $errors->first() }}</p>
</div>
@endif

<form action=”{{ URL::route(‘article.update’,$article->id)}}”
method=”post” accept-charset=”utf-8″ class=”am-form”>

  <input type="hidden" name="_token" id="token" value="<?php echo csrf_token(); ?>">
  <div class="am-form-group">
    <label for="title">Title:</label>
    <input type="text" name="title" id="title" value="{{ $article->title}}" placeholder="">
  </div>
  <div class="am-form-group">
    <label for="content">Content:</label>
    <textarea name="content" id="content" rows="20" >{{ $article->content }}</textarea>
    <p class="am-form-help">
      <button id="preview" type="button" class="am-btn am-btn-xs am-btn-primary">
       Preview
      </button>
    </p>
  </div>
  <div class="am-form-group">
    <label for="tags">Tags:
        <input type="text" name="tags" value="{{ $article->tags }}" placeholder="">
    </label>
    <p class="am-form-help">Separate multiple tags with a comma ","</p>
  </div>
  <p><button type="submit" class="am-btn am-btn-success">
     Modify</button>
  </p>

</form>
</div>

</div>

<div class=”am-popup” id=”preview-popup”>
<div class=”am-popup-inner”>

<div class="am-popup-hd">
  <h4 class="am-popup-title"></h4>
  ×
</div>
<div class="am-popup-bd">
</div>

</div>

</div>
<script>
$(function() {

  $('#preview').on('click', function() {
      $('.am-popup-title').text($('#title').val());
      $.post('preview', {'content': $('#content').val(),'_token':$('#token').val()}, function(data, status) {
        $('.am-popup-bd').html(data);
      });
      $('#preview-popup').modal();
  });

});

</script>
@endsection

标签是为了给用户发表的稿子分类,便于寻找有关音信,其主导代码完毕为:

@extends(‘layouts.default’)

@section(‘main’)
<div class=”am-g am-g-fixed blog-g-fixed”>
<div class=”am-u-sm-12″>

  <table class="am-table am-table-hover am-table-striped ">
  <thead>
  <tr>
    <th>TagName</th>
    <th>ArticleCount</th>
    <th>CreateDateTime</th>
    <th>Managment</th>
  </tr>
  </thead>
  <tbody>
    @foreach ($tags as $tag)
    <tr>
      <td>{{{ $tag->name }}}</td>
      <td>{{ $tag->count }}</td>
      <td>{{ $tag->created_at->format('Y-m-d H:i') }}</td>
      <td>
          <a href="{{ URL::to('tag/'. $tag->id . '/edit') }}" class="am-btn am-btn-xs am-btn-primary"> Edit</a>
          <form action="{{ URL::to('tag/'.$tag->id.'/delete')}}" method="get" accept-charset="utf-8" style="display: inline;">
             <button type="button" class="am-btn am-btn-xs am-btn-danger" id="delete{{ $tag->id }}">
                  Delete
             </button>
          </form>
       </td>
    </tr>
    @endforeach
  </tbody>
</table>

</div>
</div>

<div class=”am-modal am-modal-confirm” tabindex=”-1″
id=”my-confirm”>
<div class=”am-modal-dialog”>

<div class="am-modal-bd">
</div>
<div class="am-modal-footer">
  No
  Yes
</div>

</div>
</div>
<script>
$(function() {

$('[id^=delete]').on('click', function() {
  $('.am-modal-bd').text('Sure you want to delete it?');
  $('#my-confirm').modal({
    relatedTarget: this,
    onConfirm: function(options) {
      $(this.relatedTarget).parent().submit();
    },
    onCancel: function() {
    }
  });
});

});
</script>
@endsection

错误处理:

若果用户访问的URL不存在或者服务器存在不当时,我们不期待回到一个默许的失实页面,而想回去一个融洽提醒的页面,在
Laravel
中得以很自在地达成,Laravel有很简短的荒唐和日志处理,当服务器端存在指鹿为马时,app\Exceptions\Handler.php
里默许有一个告诉富有特其他顺序:

/**

* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param  \Exception  $e
* @return void
*/

public function report(Exception $e)
{

   return parent::report($e);

}

当访问的URL不存在时,服务器会抛出一个 404 错误,laravel 对 HTTP
格外有专门的处理形式:

@extends(‘layouts.default’)

@section(‘main’)

<h1 style="text-align:center;">啊哦,你访问的页面不存在!</h1>
<h2 style="text-align:center;">返回 <a href="/">首页</a></h2>

@endsection

今昔当您拜访的 URL 不存在时,laravel 会自动到模板目录去摸索状态码为 404
的谬误模板页面 404.blade.php

6、测试及操作表达

主页突显:

www.30064.com 29

主页浮现.png

总体页面做的可比短小,因为自己着重在作用达成,故对界面设计方面没有花皇太后圣母皇太后多时光。

用户登录:

www.30064.com 30

管理员登录.png

那边的记名注册使用了laravel框架的regex正则表达式匹配。

报到之后,会现出小说管理界面:

www.30064.com 31

文章管理.png

此地随便添加了一部分测试数据。

删除小说:

www.30064.com 32

预览小说.png

点击删除小说会调用一段js代码,已毕模态弹出框。

揭橥作品:

www.30064.com 33

布告音信.png

其一编辑器使用了markdown语法来编排文字,可能对于普通用户来说有比较高的三昧,本想用富文本编辑器的,但是由于岁月比较紧张,而markdown插件易于使用,故在beta版本中以此来暂时代替。

点击预览:

www.30064.com 34

预览小说.png

那里也调用了js解析markdown,生成html。

公布之后:

www.30064.com 35

失物招领启事详情.png

如此那般一个简约的失物招领启事公布管理种类就完事了,测试各职能正常。

总结

透过开发那一个高校失物招领平台,其实就做到了一个纤维内容管理连串,一个一体化的内容管理连串包罗那多少个主导的模块:

  • 用户管理
  • 文章管理
  • 权限管理
  • 标签管理

90%的网站功效开发都可以归咎为CRUD(即增删改查)操作,可能对此一个这么效果简单的军事管制系列的话,没有须要去行使大型的laravel框架,看起来有些过分设计了,可是本人作为一个php初学者的话,也是想透过那个机遇来上学一下那些赏心悦目的框架,学习框架的进度也加剧了对php语言的知情,对于尔后开发更大型的网站能够积累一点有关经验。

这几个体系当下还设有许多问题,比如界面不孝庄符合失物招领的健康设计,有成百上千那会儿的考虑也没能完成,markdown的编辑器不容许用在面向普通用户的网页中,入口首页和留言板效率由于时日涉及没能加上,颇为不满。我梦想今后能有时光去渐渐地完善它,改造为自己的私房博客,或者以此为基础,达成自身一贯以来的一个想方设法——搭建一个学童门户网站,当然那一个工程量就丰盛大了。

想起一下这一切的学习开发过程,深感不易。从最主旨的前端html+css+js学起,到php的大旨语法,再到laravel框架的就学,时期查阅了大气的素材,观望了100+时辰的在线mooc视频,才马到功成了那份课程设计。感谢这一个技术博客博主的忘我分享,前人的阅历与看法防止后人少走了有些弯路,也透过深感开源分享精神之根本,正是开源运动才使得现今的互联网行业得到那样发达的上进。所以我想在之后的上学进度中,也相应时时勿忘总计个人的阅历,并且要享受出去,让投机的弯路成为别人的桥梁。

也谢谢我的同伴们的鼓励和付出,正是一个团社团的搭档才使得那份文章可以如期落成。

参考文献

  1. 《php与MySQL web程序设计》
  2. 《html+css+js 网页设计》
  3. 《laravel 5.1 官方文档》
  4. 重重博客及慕课网、腾讯网云课堂相关学科

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图