Laravel 中的资源控制器概念
Resource controller Concept In Laravel
在我学习 laravel 时,我无法理解当我尝试通过在 URL 中键入 posts/edit 来访问我的 edit.blade.php 页面时(该文件是在 resource/views/posts)
它正在调用方法 show 并在该页面上打印“show”,如果我键入 posts/posts/edit,就会显示 edit.blade.php(如下所述)。请指导我这里做错了什么
edit.blade.php
@extends('main')
@section('content')
<h1>Update Post</h1>
<form method="POST" action="{{route('posts.update', $post) }}" >
@method('PUT')
@csrf
<input type="text" name="title"><br><br>
<input type="text" name="body"><br><br>
<button type="submit" class="btn btn-primary">Update</button>
</form>
@endsection
PostController.php(资源控制器)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\posts;
use Sessions;
class PostController extends Controller
{
public function create()
{
return view('posts.create');
}
public function store(Request $request)
{
$post = new posts;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('posts/read');
}
public function show($data)
{
echo "show";
}
public function edit($id)
{
return view('posts.edit');
}
public function update(Request $req, $id)
{
echo posts::where('title' , $req->title)
->update(['body'=>$req->body]);
return redirect('/');
}
public function destroy($id)
{
$post = posts::find($id);
$post->delete();
return redirect('/');
}
}
路线:
Route::resource('posts', 'PostController');
你的路线是这样的:
GET posts/{post}/edit EDIT
GET posts/{post} SHOW
所以 URI posts/edit
匹配 SHOW 路由:
posts/edit posts/{post}
posts/edit
URI posts/posts/edit
匹配 EDIT 路由:
posts/posts/edit posts/{post}/edit
posts/posts /edit
这是预期的以及路由的设置方式。
首先你像这样改变你的控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Post;
use Sessions;
class PostController extends Controller
{
public function create()
{
return view('posts.create');
}
public function store(Request $request)
{
$post = new Post;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('posts/read');
}
public function show($id)
{
$post = Post::find($id);
return view(posts.show, ['post' => $post]);
}
public function edit($id)
{
$post = Post::find($id);
return view(posts.edit, ['post' => $post]);
}
public function update(Request $request, $id)
{
dd($request->all()); //check before update
}
public function destroy($id)
{
$post = Post::find($id);
$post->delete();
return redirect('/');
}
}
在您的 edit.blade.php
中添加 $post->id
以形成 route
@extends('main')
@section('content')
<h1>Update Post</h1>
<form method="POST" action="{{route('posts.update', $post->id) }}" >
@method('PUT')
@csrf
<input type="text" name="title"><br><br>
<input type="text" name="body"><br><br>
<button type="submit" class="btn btn-primary">Update</button>
</form>
@endsection
然后在 view/posts
文件夹中创建 show.blade.php
并将此代码放入 show.blade.php
@extends('main')
@section('content')
<h1>Show Post</h1>
<h1>{{ $post->title }}</h1>
<p>{{ $post->body }}</p>
@endsection
在我学习 laravel 时,我无法理解当我尝试通过在 URL 中键入 posts/edit 来访问我的 edit.blade.php 页面时(该文件是在 resource/views/posts) 它正在调用方法 show 并在该页面上打印“show”,如果我键入 posts/posts/edit,就会显示 edit.blade.php(如下所述)。请指导我这里做错了什么
edit.blade.php
@extends('main')
@section('content')
<h1>Update Post</h1>
<form method="POST" action="{{route('posts.update', $post) }}" >
@method('PUT')
@csrf
<input type="text" name="title"><br><br>
<input type="text" name="body"><br><br>
<button type="submit" class="btn btn-primary">Update</button>
</form>
@endsection
PostController.php(资源控制器)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\posts;
use Sessions;
class PostController extends Controller
{
public function create()
{
return view('posts.create');
}
public function store(Request $request)
{
$post = new posts;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('posts/read');
}
public function show($data)
{
echo "show";
}
public function edit($id)
{
return view('posts.edit');
}
public function update(Request $req, $id)
{
echo posts::where('title' , $req->title)
->update(['body'=>$req->body]);
return redirect('/');
}
public function destroy($id)
{
$post = posts::find($id);
$post->delete();
return redirect('/');
}
}
路线:
Route::resource('posts', 'PostController');
你的路线是这样的:
GET posts/{post}/edit EDIT
GET posts/{post} SHOW
所以 URI posts/edit
匹配 SHOW 路由:
posts/edit posts/{post}
posts/edit
URI posts/posts/edit
匹配 EDIT 路由:
posts/posts/edit posts/{post}/edit
posts/posts /edit
这是预期的以及路由的设置方式。
首先你像这样改变你的控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Post;
use Sessions;
class PostController extends Controller
{
public function create()
{
return view('posts.create');
}
public function store(Request $request)
{
$post = new Post;
$post->title = $request->input('title');
$post->body = $request->input('body');
$post->save();
return redirect('posts/read');
}
public function show($id)
{
$post = Post::find($id);
return view(posts.show, ['post' => $post]);
}
public function edit($id)
{
$post = Post::find($id);
return view(posts.edit, ['post' => $post]);
}
public function update(Request $request, $id)
{
dd($request->all()); //check before update
}
public function destroy($id)
{
$post = Post::find($id);
$post->delete();
return redirect('/');
}
}
在您的 edit.blade.php
$post->id
以形成 route
@extends('main')
@section('content')
<h1>Update Post</h1>
<form method="POST" action="{{route('posts.update', $post->id) }}" >
@method('PUT')
@csrf
<input type="text" name="title"><br><br>
<input type="text" name="body"><br><br>
<button type="submit" class="btn btn-primary">Update</button>
</form>
@endsection
然后在 view/posts
文件夹中创建 show.blade.php
并将此代码放入 show.blade.php
@extends('main')
@section('content')
<h1>Show Post</h1>
<h1>{{ $post->title }}</h1>
<p>{{ $post->body }}</p>
@endsection