5个项目带您到家精晓Laravel框架,基于laravel框架营造最小内容管理类别

EpiiAdmin

EpiiAdmin
php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js,
让复杂的互相变得更简明!Phper快捷搭建立外交关系互性温台的开销框架

美高梅开户网址 1

Laravel框架简介:

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web
Framework)。它能够让您从面条一样纷繁扬扬的代码中解脱出来,帮您营造3个健全的互连网APP,而且每行代码都足以简单、富于表明力。

Laravel框架简介:

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web
Framework)。它能够让您从面条一样纷纭扬扬的代码中脱身出来,帮您构建二个完善的互连网APP,而且每行代码都能够简单、富于表明力。

学校失物招领平台开发

EpiiAdmin是基于Thinkphp5.1+Adminlte3.0+Require.js的飞速搭建通用管理宗旨或用户中央的支付框架。

Laravel框架教程:

比比皆是PHP开发者在开始展览项目支付的时候,第叁时间就会想到Laravel,倘使您也正想上学那几个优雅凝练的Laravel框架,不妨可以从以下陆个科目入手,从基础到实战项目都饱含了:

Laravel框架教程:

洋洋PHP开发者在开始展览项目开发的时候,第3时半刻间就会想到Laravel,假使您也正想学习这些优雅凝练的Laravel框架,不妨能够从以下伍个科目入手,从基础到实战项目都带有了:

——基于laravel框架创设最小内容管理系列



缓解了什么样难点。

Php在火速支付web应用上优势很引人侧目,尤其是php7.2在性质上海高校幅度进步,技术的不断更新,新的框架不断发出,使得众多应用层框架来不及更新。大家在碰到新品类时,总是徘徊用旧的框架去付出,仍然用到新的框架去做。采取之后很很多少人挑选了用旧框架,为啥?因为其它一个系统总要求管住骨干,或用户基本,而这个界面更加多的是前台框架。很多Phper想使用最新的框架(laravel只怕thinkphp5.1)去开发,但因前端而止步,不得不为了进程,用旧的系统去改。EpiiAdmin
就是为了缓解那个难点。本框架即使遵照tp5.1,但很简单改为laravel。

【Laravel 5.1 基础教程】

该课程从环境布署开端,将路由、控制器等为主知识点实行讲解和实行,力求让学习者通过投机做尝试来更快上手
Laravel 开发,也能在支付的长河中体味 Laravel
的艺术感。并且在最后会教大家通过三十几分钟搭建贰个娇小博客,让大家对Laravel基础知识实行回想通过进行深化记念并巩固学习。

美高梅开户网址 2

【Laravel 5.1 基础教程】

该学科从环境安顿先河,将路由、控制器等主旨知识点举行教学和履行,力求让学习者通过祥和做试验来更快上手
Laravel 开发,也能在付出的进度中体会 Laravel
的艺术感。并且在最终会教我们经过二十九分钟搭建贰个精美博客,让大家对Laravel基础知识实行回顾通超过实际践深化记念并加固学习。

美高梅开户网址 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 的同窗。

美高梅开户网址 4

【Laravel完结用户注册登录】

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

美高梅开户网址 5

目录

在线演示

EpiiAdmin演示

【Laravel 5.1 连忙搭建用户认证系统】

该类型基于 Laravel 5.1 的 Auth
系统和第②方插件飞快搭建一套宗旨的蕴藏:登录/注册/图片验证码认证/忘记密码等职能的用户认证系统。

美高梅开户网址 6

美高梅开户网址 7

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

该品种基于 Laravel 5.1 的 Auth
系统和第2方插件神速搭建一套中央的涵盖:登录/注册/图片验证码认证/忘记密码等功效的用户认证系统。

美高梅开户网址 8

美高梅开户网址 9

一、引言

1.课题切磋背景及意义

2.种类可行性分析

在线文书档案

EpiiAdmin在线普通话文书档案

【Laravel 5.1 制作简便相册】

品类从界面、数据库的欧洲经济共同体安插开首,使用 Laravel 5.1
一步一步的搭建三个简便的 bootstarp
风格瀑布流相册。适合已经学习过laravel基础知识的同班作为项目练手,巩固知识点。

美高梅开户网址 10

【Laravel 5.1 制作不难相册】

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

美高梅开户网址 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 前端工作流等开发方法。

美高梅开户网址 12

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

该品种带您兑现一体化的仿腾讯网和讯的类别,学习使用 PHP 最热的 Web 框架
Laravel 创设利用。在项目实战中,入门并明白 Laravel 的主干用法,学习
HTML、CSS、JavaScript、PHP 和 Bootstrap 等知识,同时施行 Git
工作流、居尔p 前端工作流等开发方法。

美高梅开户网址 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
的同桌。

美高梅开户网址 14

美高梅开户网址 15

【Laravel大型项目类别教程】

本项目经过选择 Laravel5.1 和 AmazeUI
达成叁个多用户博客系统,一步步达成各类功用模块,学习 PHP 的品种支出及
Laravel 框架的利用。本项目须求掌握 PHP
基础知识。本课程难度适中,适合对PHP后台开发感兴趣以及想入门 laravel
的同班。

美高梅开户网址 16

美高梅开户网址 17

四 、主旨作用的技术达成

1.支付环境

2.技艺框架

3.数据库设计

4.MVC设计格局

5.大旨代码完结

6.测试及操作表明

Demo 截图

美高梅开户网址 18

最后

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

最后

如上四个科目,都足以在实验楼5个项目带您到家精晓Laravel框架,基于laravel框架营造最小内容管理类别。上拓展在线学习,不但有详实的支付步骤和代码讲解,更有在线的支出条件,能够每二十五日跟着教程入手操作学习。

五、总结

学科文书档案目录

美高梅开户网址 19

EpiiAdmin在线汉语文档

⑥ 、参考文献


引言

1. 课题商讨背景及意义

学士由于指点的事物较多,活动多,而且平时来往于分裂的地点,因而很简单发生物品遗失的图景,而日前大家学校又不够一套一蹴而就的能够扶持学生寻找失物的种类。考虑到博士普遍上网,而且高校网络覆盖率高,
那么就通过网络这一便捷飞速的不二法门来贯彻1个失物招领系统,优化失物招领业务,使得失物招领管理清晰化、透明化,便于操作,易于管理。通过本系统,拾主能够通过这几个平台发表最新的招领启事以文告大家,而失主能够透过那一个平台寻找和关系拾主。并且只尽管网站的注册用户,就足以揭穿管理小说、留言,那样不但财产上的损失制止了,还增强了人与人以内的沟通。所以说开发这么些失物招领平台,定会大大有利高校内广大师生的活着,不必再为丢失寻找物品那类琐事烦扰,真正地让技术服务于生活。

2.种类可行性分析

  • 技巧可行性

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

  • 经济可行性

    网站平台的支出及中期的营业保险所需的人力物力很少,并且能够安插在学堂的服务器上,由网络服务大旨的工作人士统一保管。

  • 社会动向

    在学校里,大家平常见到那样一幕,一位同学在热水房门口1次三遍寻找,然后口里说着,怎么又不见了啊?,一边不甘心的再找一次。又大概是那样一幕,“寻物启事——宿舍号,丢失物品,最后再诅咒一下那个捡拾物品不还的人。”现有失物招领处工作繁琐且功用低,由此开发失物招领管理种类是不行供给的。


系统供给分析

① 、业务流程

业务流程分析可以支持开发者理解该业务处理进度,发现和拍卖系统调查工作中的错误和疏漏。业务流程分析是由此业务流程图来拓展,即用有个别规定的记号及连线来表示某些具体作业处理进程。

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

美高梅开户网址 20

作业流程.PNG

贰 、用户体验分析

用户体验是后天产品开发进度中国和欧洲常珍视的2个地方,我们付出出一款产品照旧提供一项服务,其最终边向的是不珍视或不在乎技术层面的科普用户,由此在界面友好性、直观性、易于操作性方面必须加以考虑。本失物招领系统依据下述原则进行:

  • 实用性:系统以用户要求为对象,以便于用户选择为基准,丰盛考虑实操的各项细节,使得普通用户在开拓页面包车型客车率先眼即能对操作流程有阅览者清的知晓。真正创设起多个为师生服务的阳台,为用户的在线失物招领查询公布提供方便。
  • 高安全性:在设计中,将足够考虑互连网软、硬件方面包车型客车各样安全措施,有限帮忙用户数量消息安全。比如用户存放在数据库的账号密码采纳php的哈希加密,固然数据库走漏,看到的也将是一堆乱码。
  • 可维护性:网站的规划须要方便维护,文件目录及代码结构清晰。
  • 可扩大性:网站的安排性以利于今后的扩张和体系扩展为指标,系统要求能够方便升级,方便添加功用模块。

系统模块设计

1.作用模块

本管制体系首要能够实现用户注册、用户(管理员)登录、首页彰显、失物招领的稿子披露、留言板、后台管理,
以及标签管理等几大模块的作用:

  • 用户注册:本成效首倘使落到实处对用户信息的挂号管理
  • 用户(管理员)登录:本成效首要实现用户(管理员)登录的效益
  • 首页模块:本模块重假如对失物招领小说的展现效果、添加功效、查看详情功效及各模块入口
  • 留言板模块:首尽管贯彻用户(管理员)留言成效,以供用户反映
  • 后台管理:用户新闻保管、失物招领小说管理、留言板留言管理、管理员音讯保管、标签管理

本系统关键功能布局如下图所示:

美高梅开户网址 21

意义结构图.PNG

2、用户界面

  • 挂号页面:本界面主要收集注册用户的音信,然后存入系统数据库
  • 报到页面:本页面根据登录用户的音信和项目进行验证登录
  • 首页:本页面展示用户所发表的失物招领的文章,以及作品的价签
  • 留言板页面:本页面展现历史留言和丰裕留言的版块
  • 用户音信页面:本页面突显当前报到的用户的新闻及宣布的稿子管理
  • 管制页面:本页面是协会者对本网站各类版块实行田管的可视化操作页面

中央效能的技巧达成

1、开发环境

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

② 、技术框架

后端的php框架采用了国外流行的开源框架——laravel,也是称呼“最精简、优雅的php
web开发框架”,基于此能够高速、高效地营造一个web
APP,Laravel的对象是给开发者创制2个开心的支付进度,并且不捐躯应用的功效性。刚初阶学习php开发没多长期,对php的片段框架了然吗少,在csdn上看出一篇小说《php开发框架流行度排行:laravel居首》,才清楚有laravel这么2个框架,并且其文件目录、代码结构清晰,基于MVC的设计格局,对初学者较友好,故选取了此框架,本篇课程设计相当的大程度上也毕竟本身对laravel框架的上学实践吧。php的选用框架众多,如国产的thinkPHP框架在国内也使用者甚广,中期曾品尝使用thinkPHP来开发,其布局代码不难直接,易于上手,但在代码规范性方面毁誉参半,不吻合初我们养成优秀的编码习惯,故弃之。

上面就对laravel框架种类布局作简要介绍。

Laravel被称之为“全栈”式框架,因为它能够处理从互联网服务到数据库管理、HTML生成的所有事情,垂直集成的web开发环境给开发者提供了更好的经验。开发人士能够经过命令行工具,生成和管理Laravel项目环境。
Laravel带有3个名为阿特isan的优异的命令行工具,能够用它来生成框架代码和数据库架构,Artisan能够处理从数据库架构迁移到能源和布置管理的上上下下工作。

laravel项目应用composer来创制(Composer是PHP中用来管理重视(dependency)关系的工具。你能够在祥和的品种中证明所依赖的表面工具库(libraries),Composer会帮你安装这么些依赖的库文件)。在linux终端中实行:

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

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

美高梅开户网址 22

071625168621849.png

上面是各类文件夹和文书的中央介绍:

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

看来,/app是其基本部分,/app文件夹的详细信息如下:

美高梅开户网址 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组件,如下图:

美高梅开户网址 24

071626088464369.png

laravel的响应流程

当与Laravel交互时,浏览器发送二个伸手,web服务器收到到请求并且传给Laravel路由引擎。Laravel路由接收到请求,然后重定向给基于路由的U纳瓦拉L情势的适用的操纵器类方法。然后决定器类接管。在某种境况下,控制器会登时显示出一个视图,它是叁个被转换来HTML并送回浏览器的模版。更宽广的动态网站,控制器与模型交互,那是2个PHP对象,它代表应用程序(如用户、博客小说)中的三个元素,并担负与数据库实行通讯的。调用模型后,控制器则显示最后视图(
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数据库中留存的表如下图所示:

美高梅开户网址 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/文件夹下的目录结构如图所示:

美高梅开户网址 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)来生成U大切诺基L,处理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 时,会出现谬误提醒:

美高梅开户网址 27

选区_013.png

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

美高梅开户网址 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');
}

}

1个用户会有多篇小说。

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简洁优雅的排版格式可以使著作样式更美观(或许也亟需肯定的就学开支)

向数据库中添加文章,要用到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奇骏L不存在或许服务器存在颠倒是非时,我们不期待回到四个私下认可的一无所能页面,而想重临1个和谐提醒的页面,在
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);

}

当访问的UTiggoL不设有时,服务器会抛出贰个 404 错误,laravel 对 HTTP
很是有特意的处理格局:

@extends(‘layouts.default’)

@section(‘main’)

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

@endsection

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

陆 、测试及操作表达

主页彰显:

美高梅开户网址 29

主页呈现.png

一体化页面做的可比精简,因为笔者尊重在职能落成,故对界面设计方面从未花太多日子。

用户登录:

美高梅开户网址 30

协会者登录.png

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

签到之后,会现出文章管理界面:

美高梅开户网址 31

小说管理.png

那里随便添加了某些测试数据。

除去小说:

美高梅开户网址 32

预览作品.png

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

发布小说:

美高梅开户网址 33

宣布新闻.png

本条编辑器使用了markdown语法来编排文字,也许对此普通用户来说有相比高的门路,本想用富文本编辑器的,不过出于时间较为紧张,而markdown插件易于使用,故在beta版本中以此来近日期替。

点击预览:

美高梅开户网址 34

预览文章.png

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

发布之后:

美高梅开户网址 35

失物招领启事详情.png

诸如此类一个简便的失物招领启事宣布管理体系就做到了,测试各职能寻常。

总结

由此支付那几个学校失物招领平台,其实就成功了贰个细小内容管理体系,2个完全的始末管理体系包含这多少个大旨的模块:

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

百分之九十的网站效用开发都能够归纳为CRUD(即增加和删除改查)操作,恐怕对此1个这么效果不难的保管系列的话,没有供给去行使大型的laravel框架,看起来某个过分设计了,然而自己作为2个php初学者的话,也是想透过那一个空子来学习一下那几个美貌的框架,学习框架的进程也加深了对php语言的通晓,对于尔后开发更大型的网站能够积累一点荣辱与共经验。

本条连串当下还设有重重难点,比如界面不太符合失物招领的平常设计,有不少当场的考虑也没能达成,markdown的编辑器不容许用在面向普通用户的网页中,入口首页和留言板作用由于时间关系没能加上,颇为不满。小编梦想以往能有时光去逐步地全盘它,改造为本人的私有博客,大概以此为基础,达成小编平素以来的1个想法——搭建3个上学的儿童门户网站,当然那么些工程量就极度大了。

回看一下那全数的读书开发进度,深感不易。从最基本的前端html+css+js学起,到php的中心语法,再到laravel框架的求学,时期查阅了大气的材质,观察了100+时辰的在线mooc录像,才水到渠成了那份课程设计。多谢那么些技术博客博主的无私分享,前人的经验与意见制止后人少走了有点弯路,也透过深感开源分享精神之重要性,正是开源运动才使得于今的互联网行业收获如此蓬勃的开拓进取。所以我想在以往的上学进度中,也相应时时勿忘总括个人的经验,并且要分享出来,让祥和的弯路成为旁人的大桥。

也多谢作者的同伙们的鼓励和交由,就是三个团体的合营才使得那份文章能够如期完结。

参考文献

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

发表评论

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

网站地图xml地图