Laravel6.X资源控制器Restful控制器教程
2020-02-01 本文已影响0人
前端组件库
Laravel资源控制器是非常简便的做增改删查的方式。那么我们就开始做一个例子。
1.执行命令做资源控制器,模型文件和工厂文件。
php artisan make:model Post -m -f
php artisan make:controller PostsController --resource --model=Post
第一个命令执行了以后做一个模型文件,连同迁移和工厂文件。
第二个命令创建一个资源控制器,对应这个模型。
我们先来看看资源控制器的内容:
<?php
namespace App\Http\Controllers;
use App\Post;
use Illuminate\Http\Request;
class PostsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function show(Post $post)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function edit(Post $post)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Post $post)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function destroy(Post $post)
{
//
}
}
这里就是我们要做的全部方法。接下来我们填充下假数据。
2.填充假数据
php artisan tinker
factory(\App\Post::class, 40)->create();
这样我们假数据就填充完了。接下来我们做视图文件。
3.加路由代码
Route::resource('posts', 'PostsController');
4.修改模型文件fillable属性 App/Post.php
protected $fillable = [ 'title', 'description'];
5.控制器代码:
<?php
namespace App\Http\Controllers;
use App\Post;
use Illuminate\Http\Request;
class PostsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$posts = Post::all();
return view('posts.index', compact("posts"));
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
return view('posts.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
Post::create($request->all());
return redirect()->route('posts.index');
}
/**
* Display the specified resource.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function show(Post $post)
{
return view('posts.show', compact('post'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function edit(Post $post)
{
return view('posts.edit', compact('post'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Post $post)
{
$post->update($request->all());
return redirect()->back();
}
/**
* Remove the specified resource from storage.
*
* @param \App\Post $post
* @return \Illuminate\Http\Response
*/
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index');
}
}
6.做视图文件
在resources/views/posts文件夹下面创建create.blade.php, index.blade.php, edit.blade.php, show.blade.php。
index.blade.php
@foreach($posts as $post)
<a href="{{route('posts.show', $post->id)}}">{{$post->title}}</a><br>
{{$post->description}}<br>
@endforeach
show.blade.php, 把删除按钮放在上面:
{{$post->title}}<br>
{{$post->description}}<br>
<form action="{{route('posts.destroy', $post->id)}}" method="post">
@csrf
@method('delete')
<input type="submit" value="删除">
</form>
<a href="{{route('posts.edit')}}">修改</a>
create.blade.php的代码:
<form action="{{route('posts.store')}}" method="post">
@csrf
<input type="text" name="title" id="">
<input type="text" name="description" id="">
<input type="submit" value="提交">
</form>
edit.blade.php的代码:
<form action="{{route('posts.update', $post->id)}}" method="post">
@csrf
@method('PUT')
<input type="text" name="title" value="{{$post->title}}">
<input type="text" name="description" value="{{$post->description}}">
<input type="submit" value="提交">
</form>