让复杂的竞相变得更简约,基于laravel框架创设最小内容管理连串

by admin on 2019年2月4日

EpiiAdmin

EpiiAdmin
php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js,
让复杂的互动变得更简约!Phper神速搭建交互性平台的付出框架

bf88必发唯一官网 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基础知识进行追思通过实施深化回想并巩固学习。

bf88必发唯一官网 2

【Laravel 5.1 基础教程】

该学科从环境布署早先,将路由、控制器等主导知识点举办讲解和履行,力求让学习者通过友好做试验来更快上手
Laravel 开发,也能在付出的经过中体会 Laravel
的艺术感。并且在终极会教我们经过30分钟搭建一个精美博客,让我们对Laravel基础知识进行追思通过推行深化记念并巩固学习。

bf88必发唯一官网 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 的同室。

bf88必发唯一官网 4

【Laravel完成用户注册登录】

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

bf88必发唯一官网 5

目录

在线演示

EpiiAdmin演示

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

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

bf88必发唯一官网 6

bf88必发唯一官网 7

【Laravel 5.1 火速搭建用户认证系统】

该类型基于 Laravel 5.1 的 Auth
系统和第三方插件飞快搭建一套焦点的含有:登录/注册/图片验证码认证/忘记密码等功能的用户认证种类。

bf88必发唯一官网 8

bf88必发唯一官网 9

一、引言

1.课题探讨背景及意义

2.种类可行性分析

在线文档

EpiiAdmin在线中文文档

【Laravel 5.1 制作简便相册】

品类从界面、数据库的完好设计早先,使用 Laravel 5.1
一步一步的搭建一个简约的 bootstarp
风格瀑布流相册。适合已经学习过laravel基础知识的同校作为项目练手,巩固知识点。

bf88必发唯一官网 10

【Laravel 5.1 制作简单相册】

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

bf88必发唯一官网 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 前端工作流等开发方法。

bf88必发唯一官网 12

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

该类型带你完毕完整的仿天涯论坛微博的品类,学习运用 PHP 最热的 Web 框架
Laravel 营造利用。在品种实战中,入门并操纵 Laravel 的中坚用法,学习
HTML、CSS、JavaScript、PHP 和 Bootstrap 等文化,同时执行 Git
工作流、Gulp 前端工作流等开发方法。

bf88必发唯一官网 13

三、系统模块设计

1.成效模块

2.用户界面

环境必要

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
的同学。

bf88必发唯一官网 14

bf88必发唯一官网 15

【Laravel大型项目序列教程】

本项目通过利用 Laravel5.1 和 AmazeUI
落成一个多用户博客系统,一步步落到实处各种功用模块,学习 PHP 的品种支付及
Laravel 框架的施用。本项目必要明白 PHP
基础知识。本学科难度万分,适合对PHP后台开发感兴趣以及想入门 laravel
的同校。

bf88必发唯一官网 16

bf88必发唯一官网 17

四、主题作用的技巧完成

1.付出环境

2.技能框架

3.数据库设计

4.MVC设计格局

5.主题代码完毕

6.测试及操作说明

Demo 截图

bf88必发唯一官网 18

最后

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

最后

如上6个学科,都足以在实验楼上进行在线学习,不但有详实的支付步骤和代码讲解,更有在线的支出条件,可以天天跟着教程下手操作学习。

五、总结

学科文档目录

bf88必发唯一官网 19

EpiiAdmin在线汉语文档

六、参考文献


引言

1. 课题商量背景及意义

博士由于指导的东西较多,活动多,而且平时往来于差其他地方,因此很简单暴发物品丢失的气象,而近来大家校园又缺少一套一蹴而就的可以扶持学习者寻找失物的连串。考虑到学士普遍上网,而且校园互连网覆盖率高,
那么就因而互连网这一便捷火速的法子来贯彻一个失物招领系统,优化失物招领业务,使得失物招领管理清晰化、透明化,便于操作,易于管理。通过本系统,拾主可以由此那几个平台公布新型的招领启事以文告大家,而失主可以经过这么些平台寻找和关联拾主。并且只若是网站的登记用户,就足以公布管理小说、留言,这样不仅财产上的损失避免了,还进步了人与人里面的互换。所以说开发这几个失物招领平台,定会大大有利于校园内广大师生的活着,不必再为丢失寻找物品那类琐事苦恼,真正地让技艺劳务于生活。

2.连串可行性分析

  • 技能方向

    让复杂的竞相变得更简约,基于laravel框架创设最小内容管理连串。运用祥和的ubuntu
    linux作为服务器环境,Apache处理客户端与服务端的通讯,MySQL数据库存放用户音讯和揭发的稿子、留言,php作为后端语言,完结动态页面处理,再增进简洁优雅的响应式前端开发框架,可以付出出符合要求的管住连串。

  • 经济可行性

    网站平台的支出及中期的运营保险所需的人力物力很少,并且可以安排在全校的服务器上,由网络服务大旨的工作人员统一保管。

  • 社会动向

    在高校里,大家平常看到那样一幕,一位同学在热水房门口三回四次寻找,然后口里说着,怎么又不见了呢?,一边不甘心的再找一回。又或者是如此一幕,“寻物启事——宿舍号,丢失物品,最终再诅咒一下那么些捡拾物品不还的人。”现有失物招领处工作繁琐且成效低,由此支付失物招领管理种类是老大须要的。


系统需要分析

1、业务流程

业务流程分析可以协理开发者明白该事情处理进程,发现和拍卖系统调查工作中的错误和疏漏。业务流程分析是经过业务流程图来开展,即用一些规定的标记及连线来代表某个具体事情处理进程。

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

bf88必发唯一官网 20

作业流程.PNG

2、用户体验分析

用户体验是现行产品开发进度中非凡尊敬的一个地方,大家开发出一款产品仍然提供一项服务,其最前边向的是不尊重或不在乎技术层面的普遍用户,因而在界面友好性、直观性、易于操作性方面无法不加以考虑。本失物招领系统根据下述原则举行:

  • 实用性:系统以用户需要为对象,以有益用户选择为尺度,充裕考虑实际操作的各项细节,使得普通用户在开拓页面的率先眼即能对操作流程有明晰的领会。真正创设起一个为师生服务的平台,为用户的在线失物招领查询发表提供方便。
  • 高安全性:在规划中,将充裕考虑互联网软、硬件方面的种种安全措施,有限支撑用户数量信息安全。比如用户存放在数据库的账号密码接纳php的哈希加密,即便数据库走漏,看到的也将是一堆乱码。
  • 可维护性:网站的宏图要求方便维护,文件目录及代码结构清晰。
  • 可伸张性:网站的规划以造福将来的增添和体系增加为目的,系统需求可以方便升级,方便添加作用模块。

系统模块设计

让复杂的竞相变得更简约,基于laravel框架创设最小内容管理连串。1.作用模块

本管制系列重点可以落到实处用户注册、用户(管理员)登录、首页突显、失物招领的篇章透露、留言板、后台管理,
以及标签管理等几大模块的功能:

  • 用户注册:本功效首即使促成对用户音信的注册管理
  • 用户(管理员)登录:本功能主要落成用户(管理员)登录的听从
  • 首页模块:本模块重倘使对失物招领小说的显示效果、添加出力、查看详情成效及各模块入口
  • 留言板模块:首要是兑现用户(管理员)留言功用,以供用户反馈
  • 后台管理:用户音讯保管、失物招领文章管理、留言板留言管理、管理员信息保管、标签管理

本系统主要功效结构如下图所示:

bf88必发唯一官网 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
。其目录结构如下图所示:

bf88必发唯一官网 22

071625168621849.png

上面是逐一文件夹和文书的大旨介绍:

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

看来,/app是其主旨部分,/app文件夹的详细音讯如下:

bf88必发唯一官网 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组件,如下图:

bf88必发唯一官网 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数据库中留存的表如下图所示:

bf88必发唯一官网 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/文件夹下的目录结构如图所示:

bf88必发唯一官网 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 时,会油然则生错误提醒:

bf88必发唯一官网 27

选区_013.png

若注册成功就会跳转到登录页面,并付诸成功的升迁:

bf88必发唯一官网 28

选区_014.png

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

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简洁优雅的排版格式可以使文章样式更雅观(可能也急需一定的上学开支)

向数据库中添加文章,要用到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’)

bf88必发唯一官网,@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、测试及操作表达

主页显示:

bf88必发唯一官网 29

主页显示.png

完整页面做的可比短小,因为自身尊重在职能完结,故对界面设计方面尚未花太多时光。

用户登录:

bf88必发唯一官网 30

管理员登录.png

此地的记名注册使用了laravel框架的regex正则表明式匹配。

签到之后,会现出作品管理界面:

bf88必发唯一官网 31

小说管理.png

此间随便添加了一些测试数据。

删除小说:

bf88必发唯一官网 32

预览小说.png

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

表露小说:

bf88必发唯一官网 33

公布音讯.png

以此编辑器使用了markdown语法来编排文字,可能对此普通用户来说有相比较高的奥妙,本想用富文本编辑器的,可是出于时日较为紧张,而markdown插件易于使用,故在beta版本中以此来暂时代替。

点击预览:

bf88必发唯一官网 34

预览文章.png

此处也调用了js解析markdown,生成html。

颁发之后:

bf88必发唯一官网 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地图