这篇文章主要给大家介绍了关于利用laravel搭建一个迷你博客的相关资料,文中将一步步的实现步骤通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着来一起学习学习吧。

本文主要给大家介绍的是关于利用laravel搭建一个迷你博客的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

一、设计与思路

在开始写第一行代码之前,一定要尽量从头到尾将我们要做的产品设计好,避免写完又改,多写不必要的代码。

  • 需求分析:我们的迷你博客应该至少包含:新增/编辑/查看/删除文章,以及文章列表展示功能。
  • 数据库分析:基于这个功能,我们只需要一张 Articles 数据表来存放文章即可。
  • 页面结构分析:应该使用模板继承建立一张基础模板包含:头部/文章列表/底部信息

二、创建路由

完成这个博客大概需要以下几条路由:

| 路由 | 功能 | | -------- | ---------------- | | 文章列表页面路由 | 返回文章列表页面 | | 新增文章页面路由 | 返回新增文章页面 | | 文章保存功能路由 | 将文章保存到数据库 | | 查看文章页面路由 | 返回文章详情页面 | | 编辑文章页面路由 | 返回编辑文章页面 | | 编辑文章功能路由 | 将文章取出更新后重新保存到数据库 | | 删除文章功能路由 | 将文章从数据库删除 |

可以看到几乎全部是对文章的数据操作路由,针对这种情况,Laravel 提供了非常方便的办法:RESTful 资源控制器和路由。

打开routes.php加入如下代码:

Route::resource('articles', 'ArticlesController');

只需要上面这样一行代码,就相当于创建了如下7条路由,且都是命名路由,我们可以使用类似route('articles.show') 这样的用法。

Route::get('/articles', 'ArticlesController@index')->name('articles.index'); 

Route::get('/articles/{id}', 'ArticlesController@show')->name('articles.show'); 

Route::get('/articles/create', 'ArticlesController@create')->name('articles.create'); 

Route::post('/articles', 'ArticlesController@store')->name('articles.store'); 

Route::get('/articles/{id}/edit', 'ArticlesController@edit')->name('articles.edit'); 

Route::patch('/articles/{id}', 'ArticlesController@update')->name('articles.update'); 

Route::delete('/articles/{id}', 'ArticlesController@destroy')->name('articles.destroy');

三、创建控制器

利用 artisan 创建一个文章控制器:

php artisan make:controller ArticlesController

四、创建基础视图

resources/views/layouts/art.blade.php

见模板index.html

五、新建文章表单

 @extends('layouts.art')

@section('content')

 <form class="form-horizontal" method="post" action="{{route('blog.store')}}">

   {{ csrf_field() }}

 <p class="form-group">

 <label for="inputEmail3" class="col-sm-2 control-label">标题</label>

 <p class="col-sm-8">

  <input type="title" class="form-control" id="title" name="title">

 </p>

 </p>

 <p class="form-group">

 <label for="inputEmail3" class="col-sm-2 control-label">内容</label>

 <p class="col-sm-8">

  <textarea class="form-control" rows="" id="content" name="content"></textarea>

 </p>

 </p>

 <p class="form-group">

 <p class="col-sm-offset-2 col-sm-10">

  <button type="submit" class="btn btn-default">创建</button>

 </p>

 </p>

</form> 

@endsection

六、文章存储

此时如果你填写新建文章表单点击提交也会跳到一个空白页面,同样的道理,因为我们后续的控制器代码还没写。

要实现文章存储,首先要配置数据库,创建数据表,创建模型,然后再完成存储逻辑代码。

1、配置数据库

修改.env文件

2、创建数据表

利用 artisan 命令生成迁移:

php artisan make:migration create_articles_talbe --create=articles

修改迁移文件

public function up() 

 {

  Schema::create('articles', function (Blueprint $table) {

   $table->increments('id');

   $table->string('title');

   $table->longText('content');

   $table->timestamps();

  });

 }

public function down() 

 {

  Schema::dropIfExists('articles');

 }

我们创建了一张 articles 表,包含递增的 id 字段,字符串title字段,长文本content字段,和时间戳。

执行数据库迁移:

php artisan migrate

登录mysql,查看数据表。

3、创建模型

利用 artisan 命令创建模型:

php artisan make:model Article

打开模型文件,输入以下代码:

app/Article.php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Article extends Model 

{

 //对应的表

 protected $table = 'articles';

 //通过model可以写入的字段

 protected $fillable = [

  'title', 'content',

 ];

}

4、存储逻辑代码

打开 ArticlesController.php 控制器,找到 store() 方法。

app/Http/Controllers/ArticlesController.php

public function store(Request $request)

{

 //数据验证 错误处理

 $this->validate($request,[

  'title'=>'required|max:50',

  'content'=>'required|max:500',

  ]);

 // 1 orm方式写入

 $article = Article::create([

  'title'=>$request->title,

  'content'=>$request->content,

  ]);

 //2 或者

 /* $article = new Article();

  $article->title =$request->title;

  $article->content = $request->content;

  $article->save();*/

  //3 db方式写入

  //insert()方法返回值为true 和 false

  //$res = DB::table('articles')->insert(['title'=>$request->title,'content'=>$request->content]);

 return redirect()->route('blog.index');

}

验证错误显示

 @if (count($errors) > )

 <p class="alert alert-danger">

  <ul>

   @foreach($errors->all() as $error)

   <li>{{ $error }}</li>

   @endforeach

  </ul>

 </p>

@endif

七、文章列表展示

完成了添加文章功能后,就可以实现我们的文章列表展示页了。

打开 ArticlesController.php 找到 index() 方法,添加代码如下:

app/Http/Controllers/ArticlesController.php

use App\Article;

public function index() 

 {

  $articles = Article::orderBy('created_at','asc')->get();

  return view('articles.index', ['articles'=>$articles]);

 }

视图index.blade.php

@extends('layouts.art')

@section('content')

 <a class="btn btn-primary" href="{{route('blog.create')}}" rel="external nofollow" >添加文章</a>

 @foreach($articles as $article)

 <p class="panel panel-default">

 <p class="panel-body">

 {{$article->title}}

 <a href="{{route('blog.show',$article->id)}}" rel="external nofollow" class="btn btn-info">阅读</a>

 <a href="{{route('blog.edit', $article->id)}}" rel="external nofollow" class="btn btn-info">修改</a>

  <form action="{{ route('blog.destroy', $article->id) }}" method="post" style="display: inline-block;">

   {{ csrf_field() }}

   {{ method_field('DELETE') }}

   <button type="submit" class="btn btn-danger">删除</button>

  </form>

 </p>

 </p>

 @endforeach

 {!! $articles->render() !!}

 @endsection

八、编辑文章表单

编辑文章表单其实和之前创建的新建文章表单很类似,只是需要额外将现有的数据读取出来填在表单上。

首先我们在文章列表页的每个文章上添加一个编辑按钮:

视图:

 @extends('layouts.art')

@section('content')

 <form class="form-horizontal" method="post" action="{{route('blog.update',$article->id)}}">

   {{ csrf_field() }}

  {{ method_field('PATCH') }}

 <p class="form-group">

 <label for="inputEmail3" class="col-sm-2 control-label">标题</label>

 <p class="col-sm-10">

  <input type="title" class="form-control" id="title" name="title" value="{{ $article->title }}">

 </p>

 </p>

 <p class="form-group">

 <label for="inputEmail3" class="col-sm-2 control-label">内容</label>

 <p class="col-sm-10">

  <textarea class="form-control" rows="" id="content" name="content"> {{ $article->content }}</textarea>

 </p>

 </p>

 <p class="form-group">

 <p class="col-sm-offset-2 col-sm-10">

  <button type="submit" class="btn btn-default">修改</button>

 </p>

 </p>

</form> 

@endsection

注意这段代码中的 {{ method_field('PATCH') }} ,这是跨站方法伪造,HTML 表单没有支持 PUT、PATCH 或 DELETE 动作。所以在从 HTML 表单中调用被定义的 PUT、PATCH 或 DELETE 路由时,你将需要在表单中增加隐藏的 _method 字段来伪造该方法,详情参考 官方文档。

控制器

//展示修改模板

public function edit($id) 

 {

  $article = Article::findOrFail($id);

  return view('art.edit',['article'=>$article]);

 }

//执行修改

public function update(Request $request, $id) 

 {

  $this->validate($request, [

   'title' => 'required|max:50',

   'content'=>'required|max:500',

  ]);

  $article = Article::findOrFail($id);

  $article->update([

   'title' => $request->title,

   'content' => $request->content,

  ]);

   return redirect()->route('blog.index');

 }

九、删除文章

删除按钮

<form action="{{ route('blog.destroy', $article->id) }}" method="post" style="display: inline-block;">

  {{ csrf_field() }}

  {{ method_field('DELETE') }}

  <button type="submit" class="btn btn-danger">删除</button>

 </form>
控制器: public function destroy($id) { $article = Article::findOrFail($id); $article->delete(); return back(); }

十、结语

本次实验通过一个很简单的迷你博客对 Laravel RESTful 资源控制器和路由,视图,orm进行了强化练习。

以上就是laravel搭建博客实战的教程实例的详细内容关注我的知乎专栏

PHP​zhuanlan.zhihu.com

laravel搭建博客实战的教程实例的更多相关文章

  1. 在centos7上搭建博客之小白教程~

    原理 http使用方法一编译安装,php模块打入方式实现. 软件版本 在本次实验中,我们需要用到的软件版本如下: apr-1.6.2 apr-util-1.6.0 httpd-2.4.28 maria ...

  2. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(四)-使用Travis自动部署Hexo(2)

    前言 前面一篇文章介绍了Travis自动部署Hexo的常规使用教程,也是个人比较推荐的方法. 前文最后也提到了在Windows系统中可能会有一些小问题,为了在Windows系统中也可以实现使用Trav ...

  3. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(三)-使用Travis自动部署Hexo(1)

    前言 前面两篇文章介绍了在github上使用hexo搭建博客的基本环境和hexo相关参数设置等. 基于目前,博客基本上是可以完美运行了. 但是,有一点是不太好,就是源码同步问题,如果在不同的电脑上写文 ...

  4. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(二)-Hexo参数设置

    前言 前文手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置介绍了github注册.git相关设置以及hexo基本操作. 本文主要介绍一下hexo的常用参数设置. ...

  5. 手把手教从零开始在GitHub上使用Hexo搭建博客教程(一)-附GitHub注册及配置

    前言 有朋友问了我关于博客系统搭建相关的问题,由于是做开发相关的工作,我给他推荐的是使用github的gh-pages服务搭建个人博客. 推荐理由: 免费:github提供gh-pages服务是免费的 ...

  6. 可能是最详细的 Hexo + GitHub Pages 搭建博客的教程

    前言:博主目前大三,Web 前端爱好者.写博客的好处,不是为了写而写,而是一个记录思想的过程.不要考虑它能带给你什么,而是你自己从中收获了什么. 最近刚好有空,于是就参照网上的各种教程,搭建了一个博客 ...

  7. Hexo+Github博客最简教程-Dockerfile自动搭建

    闲谈 拿出你的气质,打开你的电脑,借你半小时搭建好属于你的hexo博客,小生用dockerfile自动帮你搭建好:你只需要在你的mac或linux或windows上提前把docker安装好,如何安装不 ...

  8. Hexo搭建博客教程(1) - 安装环境与本地搭建

    前言 搭建个人博客一般有两种选择,一个是使用WordPress,但是需要将博客搭建在服务器上,不过搭建好后写文章方便,适合没有程序基础的人使用.另一个是使用Hexo,相对简洁高效,不需要服务器,既可以 ...

  9. Hexo+NexT(零):最全Hexo+Next搭建博客教程

    快速.简洁且高效的博客框架 有位大神说,喜欢写博客的人的人,折腾博客会经历三个阶段.找到一个免费空间,搭建一个博客,很欣喜,很有成就感,此为一阶段:受限免费空间各种限制,自己买空间和域名,实现对博客的 ...

随机推荐

  1. STL初学

    标准模板库STL初学 线性数据结构 vector 一维向量,相当于数组 list 链表 map 映射,提供(Key,Value)式操作,相当于哈希表 string char字符串 queue 队列,先 ...

  2. mysql5.6创建账户不能本地登录

    1.通过xshell连接linux,命令登录mysql 2.创建一个新的库(其实创建不创建都可以) 3.创建账号权限 创建账号luffy 密码luffy 针对库luffy所有权限,允许任何人远程登录 ...

  3. ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II

    https://www.cnblogs.com/artech/archive/2007/09/13/891266.html 二.ASP.NET Runtime Pipeline(续ASP.NET Ht ...

  4. python接口自动化测试之http协议(一)

    1.http(超文本传输)协议:是一个基于请求与响应模式的.无状态的(不会记住每个请求的状态).应用层协议 2.url详解 https://www.baidu.com/s?ie=utf-8&f ...

  5. selenium 模拟滑动解锁

    来源:Selenium模拟JQuery滑动解锁   (selenium +Python ) 本文:selenium+Java package cn.gloryroad; import org.open ...

  6. Dapper简介

    Dapper文档 一,介绍:Dapper是一款轻量级ORM工具.如果你在小的项目中,使用Entity Framework.NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀.你又觉得 ...

  7. Java第一个程序HelloWorld

    1.创建一个java源文件:HelloWorld.java public class HelloWorld{ public static void main(String[] args){ Syste ...

  8. Django路由层、视图层

    一.路由匹配: 第一个参数是正则表达式,匹配规则按照从上往下一次匹配,匹配到一个后立即停止 urlpatterns = [ url(r'^admin/', admin.site.urls), url( ...

  9. 配置本地https

    参考 https://juejin.im/post/5a6db896518825732d7fd8e0 https://juejin.im/post/590ec765a22b9d0058fcfaa5 比 ...

  10. mysql(2):索引

    索引基础 索引介绍 定义 索引是满足某种特定查找算法的数据结构.这些数据结构会以某种方式指向数据,从而实现高效查找. 优势 提高了查询速度 劣势 降低更新表的速度,因为更新表时,MySQL不仅要保存数 ...