您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

laravel搭建一个迷你博客

2025/4/8 6:01:52发布17次查看
本文主要给大家介绍了关于利用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="5" 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) > 0)  <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="5" 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进行了强化练习。
相关推荐:
实例详解vue+springboot开发v部落博客管理平台
lamp基于php模块实现个人博客搭建的图文详解
如何php制作简易博客
以上就是laravel搭建一个迷你博客的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product