Phper神速搭建立外交关系互性凉台的付出框架,多少个种类带你到家精晓Laravel框架

EpiiAdmin

EpiiAdmin
php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js,
让复杂的并行变得更简短!Phper火速搭建立外交关系互性温台的开发框架

www.5929.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框架,不妨能够从以下陆个科目入手,从基础到实战项目都包含了:

Laravel框架教程:

无数PHP开发者在进行项目费用的时候,第一时间就会想到Laravel,要是你也正想上学那个优雅凝练的Laravel框架,不妨能够从以下5个学科动手,从基础到实战项目都包涵了:

——基于laravel框架营造最小内容管理体系



杀鸡取蛋了什么样难题。

Php在便捷支付web应用上优势很明显,特别是php7.2在性质上海南大学学幅度升高,技术的不断更新,新的框架不断发生,使得众多应用层框架来不及更新。大家在遇见新类型时,总是徘徊用旧的框架去付出,依然用到新的框架去做。接纳之后很很三个人摘取了用旧框架,为啥?因为其他一个系统总供给管住宗旨,或用户核心,而这么些界面更多的是前台框架。很多Phper想使用最新的框架(laravel或者thinkphp5.1)去支付,但因前端而止步,不得不为了进程,用旧的种类去改。EpiiAdmin
正是为了缓解这么些题材。本框架尽管按照tp5.1,但很简单改为laravel。

【Laravel 5.1 基础教程】

该课程从环境安排初始,将路由、控制器等基本知识点进行教学和实施,力求让学习者通过协调做尝试来更快上手
Laravel 开发,也能在支付的进度中体味 Laravel
的艺术感。并且在最后会教我们通过26分钟搭建一个精密博客,让我们对Laravel基础知识进行回想通超过实际行深化记念并加固学习。

www.5929.com 2

【Laravel 5.1 基础教程】

该科目从环境安顿开头,将路由、控制器等中央知识点进行讲解和推行,力求让学习者通过投机坚实验来更快上手
Laravel 开发,也能在开发的历程中体会 Laravel
的艺术感。并且在终极会教大家经过二十七分钟搭建一个细密博客,让咱们对Laravel基础知识举行追思通超过实际践深化记念并巩固学习。

www.5929.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完成用户注册登录】

Phper神速搭建立外交关系互性凉台的付出框架,多少个种类带你到家精晓Laravel框架。本项目基于 Laravel 5.1
完成一体化的网站用户注册和登陆系统。通过该品种的开支,稳步熟知优雅的 PHP
框架 Laravel。本学科难度一般,适合对PHP后台开发感兴趣以及想学学入门
laravel 的校友。

www.5929.com 4

【Laravel达成用户注册登录】

本项目基于 Laravel 5.1
完毕一体化的网站用户注册和登陆系统。通过该项指标开支,稳步熟知优雅的 PHP
框架 Laravel。本学科难度一般,适合对PHP后台开发感兴趣以及想学学入门
laravel 的同班。

www.5929.com 5

目录

在线演示

EpiiAdmin演示

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

该项目基于 Laravel 5.1 的 Auth
系统和第一方插件赶快搭建一套主题的盈盈:登录/注册/图片验证码认证/忘记密码等作用的用户认证种类。

www.5929.com 6

www.5929.com 7

【Laravel 5.1 快捷搭建用户认证类别】

该品种基于 Laravel 5.1 的 Auth
系统和第叁方插件迅速搭建一套大旨的带有:登录/注册/图片验证码认证/忘记密码等功能的用户认证系统。

www.5929.com 8

www.5929.com 9

一、引言

1.课题讨论背景及意义

2.种类可行性分析

在线文书档案

EpiiAdmin在线汉语文书档案

【Laravel 5.1 制作简便相册】

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

www.5929.com 10

【Laravel 5.1 制作简单相册】

品类从界面、数据库的完全安排初阶,使用 Laravel 5.1
一步一步的搭建二个大致的 bootstarp
风格瀑布流相册。适合已经学习过laravel基础知识的校友作为项目练手,巩固知识点。

www.5929.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
工作流、居尔p 前端工作流等开发方法。

www.5929.com 12

【Laravel 项目实战:仿果壳网今日头条Web应用】

该类型带您兑现全体的仿乐乎和讯的门类,学习运用 PHP 最热的 Web 框架
Laravel 营造利用。在类型实战中,入门并控制 Laravel 的着力用法,学习
HTML、CSS、JavaScript、PHP 和 Bootstrap 等文化,同时履行 Git
工作流、居尔p 前端工作流等开发方法。

www.5929.com 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
的同桌。

www.5929.com 14

www.5929.com 15

【Laravel大型项目体系教程】

本项目经过应用 Laravel5.1 和 AmazeUI
完毕1个多用户博客系统,一步步贯彻各样效能模块,学习 PHP 的档次开销及
Laravel 框架的施用。本项目须求通晓 PHP
基础知识。本课程难度适中,适合对PHP后台开发感兴趣以及想入门 laravel
的同学。

www.5929.com 16

www.5929.com 17

④ 、大旨效用的技巧完结

1.付出环境

2.技能框架

3.数据库设计

4.MVC设计方式

5.宗旨代码完成

6.测试及操作表达

Demo 截图

www.5929.com 18

最后

以上五个学科,都能够在实验楼上举行在线学习,不但有详尽的费用步骤和代码讲解,更有在线的成本条件,能够随时跟着教程动手操作学习。

最后

以上五个科目,都得以在实验楼上拓展在线学习,不但有详尽的付出步骤和代码讲解,更有在线的开发条件,能够每一天跟着教程入手操作学习。

五、总结

学科文书档案目录

www.5929.com 19

EpiiAdmin在线普通话文书档案

六 、参考文献


引言

1. 课题探究背景及意义

大学生由于指点的事物较多,活动多,而且常常往返于分化的地点,由此很简单生出物品遗失的景象,而日前咱们学校又缺乏一套立见成效的能够支持学员寻找失物的系统。考虑到博士普遍上网,而且高校网络覆盖率高,
那么就通过网络这一便捷飞快的格局来完结三个失物招领系统,优化失物招领业务,使得失物招领管理清晰化、透明化,便于操作,易于管理。通过本系统,拾主能够因而那一个平台发表新型的招领启事以公告我们,而失主能够经过那么些平台寻找和关联拾主。并且只假使网站的登记用户,就足以发表管理小说、留言,那样不光财产上的损失防止了,还增强了人与人之间的调换。所以说开发这一个失物招领平台,定会大大方便学校内广大师生的活着,不必再为丢失寻找物品那类琐事困扰,真正地让技术服务于生活。

2.系统可行性分析

  • 技巧可行性

    使用祥和的ubuntu
    linux作为服务器环境,Apache处理客户端与服务端的通讯,MySQL数据仓库储存放用户音信和发布的稿子、留言,php作为后端语言,达成动态页面处理,再增进简洁优雅的响应式前端开发框架,能够支付出符合供给的管制种类。

  • 经济可行性

    网站平台的费用及前期的运转维护所需的人力物力很少,并且能够配备在学校的服务器上,由互联网服务大旨的工作职员统管。

  • 社会动向

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


系统供给分析

一 、业务流程

业务流程分析能够接济开发者精晓该事务处理进度,发现和处理系统调查工作中的错误和疏漏。业务流程分析是通过业务流程图来展开,即用有个别鲜明的标志及连线来代表某些具体育工作作处理进度。

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

www.5929.com 20

事情流程.PNG

贰 、用户体验分析

用户体验是未来产品开发进程中国和澳洲常器重的一个地点,我们开发出一款产品或然提供一项服务,其最前面向的是不重视或不在乎技术层面包车型地铁广阔用户,由此在界面友好性、直观性、易于操作性方面不能够不加以考虑。本失物招领系统遵照下述原则实行:

  • 实用性:系统以用户要求为对象,以利于用户选取为基准,丰硕考虑实操的各种细节,使得普通用户在开辟页面的首先眼即能对操作流程有旁听众清的知情。真正创设起三个为师生服务的阳台,为用户的在线失物招领查询宣布提供方便。
  • 高安全性:在统一筹划中,将充足考虑网络软、硬件方面包车型地铁各样安全措施,保证用户数据音讯安全。比如用户存放在数据库的账号密码选择php的哈希加密,固然数据库走漏,看到的也将是一堆乱码。
  • 可维护性:网站的宏图要求方便维护,文件目录及代码结构清晰。
  • 可扩张性:网站的规划以造福今后的扩充和连串扩大为指标,系统供给能够方便升级,方便添加功用模块。

系统模块设计

1.功用模块

Phper神速搭建立外交关系互性凉台的付出框架,多少个种类带你到家精晓Laravel框架。本管制连串重点能够落到实处用户注册、用户(管理员)登录、首页凸显、失物招领的稿子表露、留言板、后台管理,
以及标签管理等几大模块的职能:

  • 用户注册:本作用重尽管兑现对用户新闻的挂号管理
  • 用户(管理员)登录:本效率首要完成用户(管理员)登录的效应
  • 首页模块:本模块首借使对失物招领作品的呈现效果、添加意义、查看详情作用及各模块入口
  • 留言板模块:首如若落实用户(管理员)留言效率,以供用户反馈
  • 后台管理:用户音讯保管、失物招领小说管理、留言板留言管理、管理员新闻保管、标签管理

本系统主要作用布局如下图所示:

www.5929.com 21

职能布局图.PNG

二 、用户界面

  • 登记页面:本界面首要收集注册用户的音讯,然后存入系统数据库
  • 签到页面:本页面依据登录用户的新闻和花色进行表达登录
  • 首页:本页面显示用户所发表的失物招领的稿子,以及文章的竹签
  • 留言板页面:本页面显示历史留言和添加留言的版块
  • 用户消息页面:本页面展现当前报到的用户的音讯及公布的小说管理
  • 治本页面:本页面是管理员对本网站种种版块进行保管的可视化操作页面

主导效率的技巧实现

一 、开发环境

网站的当地开发环境使用lamp(即Linux+Apache+MySQL+PHP)。lamp是一组常用来搭建动态网站大概服务器的开源软件,自身都以个别独立的主次,不过因为常被放在一起使用,拥有了越发高的包容度,共同组成了2个强硬的Web应用程序平台。lamp的有所开发工具都以开源软件,随着开源风尚的蓬勃发展,可以预知lamp会是鹏程web开发的主流,并且鉴于其零开销、学习材质多,自然成为自个儿的首要选用开发条件。

② 、技术框架

后端的php框架采用了国外流行的开源框架——laravel,也是名叫“最精简、优雅的php
web开发框架”,基于此能够长足、高效地营造三个web
APP,Laravel的指标是给开发者创造一个快活的费用进度,并且不就义应用的功用性。刚开头学习php开发没多短期,对php的部分框架了然吗少,在csdn上观望一篇小说《php开发框架流行度排行:laravel居首》,才知道有laravel这么叁个框架,并且其文件目录、代码结构清晰,基于MVC的设计方式,对初学者较友好,故选用了此框架,本篇课程设计十分大程度上也终于自身对laravel框架的读书实践吧。php的采用框架众多,如国产的thinkPHP框架在国内也使用者甚广,早先时代曾尝试采纳thinkPHP来开发,其协会代码简单直接,易于上手,但在代码规范性方面毁誉参半,不相符初我们养成卓绝的编码习惯,故弃之。

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

Laravel被号称“全栈”式框架,因为它亦可处理从网络服务到数据库管理、HTML生成的成套事情,垂直集成的web开发条件给开发者提供了更好的心得。开发人士能够通过命令行工具,生成和管理Laravel项目条件。
Laravel带有3个名为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.5929.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.5929.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)

3个优良的laravel应用程序包括上边提到的MVC组件,如下图:

www.5929.com 24

071626088464369.png

laravel的响应流程

当与Laravel交互时,浏览器发送2个伸手,web服务器收到到请求并且传给Laravel路由引擎。Laravel路由接收到请求,然后重定向给基于路由的ULacrosseL形式的合适的支配器类方法。然后决定器类接管。在某种景况下,控制器会立刻突显出一个视图,它是八个被转换到HTML并送回浏览器的模板。更宽广的动态网站,控制器与模型交互,那是多个PHP对象,它代表应用程序(如用户、博客文章)中的3个元素,并肩负与数据库进行通讯的。调用模型后,控制器则表现最后视图(
HTML,CSS和图像),并重回完整的网页到用户的浏览器。Laravel促进了这么的概念——模型、视图和控制器,应通过存款和储蓄这个因素在不一样的目录中的单独的代码文件中来保持优良的独立性。那就是Laravel目录结构发挥了成效。

​ ——laravel文档

四 、数据库设计

应用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.5929.com 25

选区_015.png

部分表的辨证:

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

article_tag:宣布的稿子的竹签

migrations:php做动员搬迁数据时发出,与中央职能非亲非故

tags:用户标签

users:存放用户账户消息

伍 、宗旨代码落成

web程序的代码一般都较多,假诺把装有的代码均放置故事集里,事无巨细,一一说明,是不现实的,故只会选择主题的业务逻辑部分代码,配以要求的解说。在前端方面,使用了AmazeUI响应式开发框架和jQuery的JavaScript库,与流行的bootstrap类似,故对前者的div,css等体制也不做过多表明。

第②解释的关键不外乎以下内容:

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

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

www.5929.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>
www.5929.com,<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)来生成URubiconL,处理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.5929.com 27

选区_013.png

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

www.5929.com 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');
}

}

3个用户会有多篇小说。

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');
}

}

1个标签会有多篇文章。

此小说编辑器使用了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

错误处理:

万一用户访问的U中华VL不设有恐怕服务器存在不当时,大家不期望回到八个暗许的失实页面,而想回到一个和谐提醒的页面,在
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);

}

当访问的U宝马7系L不存在时,服务器会抛出贰个 404 错误,laravel 对 HTTP
至极有特意的处理形式:

@extends(‘layouts.default’)

@section(‘main’)

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

@endsection

于今当您拜访的 ULX570L 不存在时,laravel 会自动到模板目录去追寻状态码为 404
的一无可取模板页面 404.blade.php

⑥ 、测试及操作表明

主页显示:

www.5929.com 29

主页显示.png

一体化页面做的可比短小,因为自个儿正视在职能达成,故对界面设计方面从未花太多时光。

用户登录:

www.5929.com 30

管理员登录.png

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

登录之后,会合世文章管理界面:

www.5929.com 31

小说管理.png

那里随便添加了有个别测试数据。

除去小说:

www.5929.com 32

预览小说.png

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

公布小说:

www.5929.com 33

发布消息.png

本条编辑器使用了markdown语法来编排文字,或许对于普通用户来说有比较高的秘诀,本想用富文本编辑器的,不过由于时日相比紧张,而markdown插件易于使用,故在beta版本中以此来暂且期替。

点击预览:

www.5929.com 34

预览文章.png

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

发表之后:

www.5929.com 35

失物招领启事详情.png

这般2个简单的失物招领启事公布管理体系就完了了,测试各职能不荒谬。

总结

因此付出那一个校园失物招领平台,其实就完了了贰个非常的小内容管理种类,一个完全的始末管理体系包蕴那多少个主导的模块:

  • 用户管理
  • 小说管理
  • 权限管理
  • 标签管理

十分九的网站效率开发都能够归结为CRUD(即增加和删除改查)操作,或者对于贰个如此效果简单的保管类别来说,没有要求去行使大型的laravel框架,看起来有点过分设计了,可是作者看成三个php初学者的话,也是想通过这些空子来学学一下以此美好的框架,学习框架的长河也深化了对php语言的接头,对于将来开发更大型的网站能够积累一点连锁经历。

以此系统当下还存在许多题目,比如界面不太适合失物招领的正规设计,有过多当场的考虑也没能完毕,markdown的编辑器不容许用在面向普通用户的网页中,入口首页和留言板效率由于岁月关系没能加上,颇为不满。作者希望现在能有时光去渐渐地全盘它,改造为自家的村办博客,或许以此为基础,实现自作者一直以来的多少个设法——搭建二个学员门户网站,当然这一个工程量就非常大了。

回忆一下这一切的学习开发进度,深感不易。从最大旨的前端html+css+js学起,到php的主干语法,再到laravel框架的上学,时期查阅了大批量的资料,观望了100+时辰的在线mooc摄像,才形成了那份课程设计。多谢那多少个技术博客博主的忘作者分享,前人的阅历与看法防止后人少走了有些弯路,也透过深感开源分享精神之根本,就是开源运动才使得现今的网络行业获得那样发达的上扬。所以自身想在之后的学习进度中,也应当时时勿忘计算个人的阅历,并且要享受出去,让投机的弯路成为旁人的桥梁。

也多谢自个儿的小伙伴们的砥砺和交由,正是1个组织的通力合营才使得那份文章能够如期达成。

参考文献

  1. 《php与MySQL web程序设计》
  2. 《html+css+js 网页设计》
  3. 《laravel 5.1 官方文书档案》
  4. 成都百货上千博客及慕课网、新浪云课堂相关学科

Leave a Comment.