Laravel 8:无法显示和编辑个人内容
Laravel 8: Unable to show and edit individual content
我使用 Laravel 8 创建了一个基本的 CRUD 站点。
创建的应用程序能够列出本地MySQL 数据库中的数据并创建新对象,但无法显示详细信息、编辑和删除对象。编辑页面上显示的错误是:
Missing required parameter for [Route: tasks.update] [URI: tasks/{task}] [Missing parameter: task]. (View: /Users/adv/Documents/workspace/unlocker/hobbs-admin/resources/views/tasks/edit.blade.php)
我在 edit.blade.php
中使用 var_dump($hobbsTask)
,发现 HobbsTask
对象是空的。怎么会?
另一方面,show.blade.php
根本没有显示任何数据。似乎它与编辑页面的问题相同。我错过了什么?
代码如下:
app/Http/Controllers/HobbsTaskController
<?php
namespace App\Http\Controllers;
use App\Models\HobbsTask;
use Illuminate\Http\Request;
class HobbsTaskController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$tasks = HobbsTask::latest()->paginate(5);
return view('tasks.index', compact('tasks'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('tasks.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'session_name' => 'required',
'pid' => 'required',
'file_path' => 'required',
'file_type' => 'required',
'file_size' => 'required'
]);
HobbsTask::create($request->all());
return redirect()->route('tasks.index')
->with('success', 'Task created successfully.');
}
/**
* Display the specified resource.
*
* @param \App\Models\HobbsTask $hobbsTask
* @return \Illuminate\Http\Response
*/
public function show(HobbsTask $hobbsTask)
{
return view('tasks.show', compact('hobbsTask'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\HobbsTask $hobbsTask
* @return \Illuminate\Http\Response
*/
public function edit(HobbsTask $hobbsTask)
{
return view('tasks.edit', compact('hobbsTask'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\HobbsTask $hobbsTask
* @return \Illuminate\Http\Response
*/
public function update(Request $request, HobbsTask $hobbsTask)
{
$request->validate([
'session_name' => 'required'
]);
$hobbsTask->update($request->all());
return redirect()->route('tasks.index')
->with('success', 'Task updated successfully');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\HobbsTask $hobbsTask
* @return \Illuminate\Http\Response
*/
public function destroy(HobbsTask $hobbsTask)
{
$hobbsTask->delete();
return redirect()->route('tasks.index')
->with('success', 'Task deleted successfully');
}
}
app/Models/HobbsTask.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class HobbsTask extends Model
{
use HasFactory;
protected $table = 'unlocker_tickets';
public $timestamps = true;
protected $fillable = [
'pid',
'session_name',
'file_type',
'file_path',
'file_size'
];
}
resources/views/Tasks/Index.blade.php
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Laravel 8 CRUD Example </h2>
</div>
<div class="pull-right">
<a class="btn btn-success" href="{{ route('tasks.create') }}" title="Create a task"> <i class="fas fa-plus-circle"></i>
</a>
</div>
</div>
</div>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered table-responsive-lg">
<tr>
<th>ID</th>
<th>Session Name</th>
<th>PID</th>
<th>File Path</th>
<th>File Type</th>
<th>File Size</th>
<th>Date Created</th>
<th>Actions</th>
</tr>
@foreach ($tasks as $task)
<tr>
<td>{{ $task->id }}</td>
<td>{{ $task->session_name }}</td>
<td>{{ $task->pid }}</td>
<td>{{ $task->file_path }}</td>
<td>{{ $task->file_type }}</td>
<td>{{ $task->file_size }}</td>
<td>{{ date_format($task->created_at, 'jS M Y') }}</td>
<td>
<form action="{{ route('tasks.destroy', $task->id) }}" method="POST">
<a href="{{ route('tasks.show', $task->id) }}" title="show">
<i class="fas fa-eye text-success fa-lg"></i>
</a>
<a href="{{ route('tasks.edit', $task->id) }}">
<i class="fas fa-edit fa-lg"></i>
</a>
@csrf
@method('DELETE')
<button type="submit" title="delete" style="border: none; background-color:transparent;">
<i class="fas fa-trash fa-lg text-danger"></i>
</button>
</form>
</td>
</tr>
@endforeach
</table>
{!! $tasks->links() !!}
@endsection
resources/views/Tasks/edit.blade.php
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Edit Task</h2>
</div>
<div class="pull-right">
<a class="btn btn-primary" href="{{ route('tasks.index') }}" title="Go back"> <i class="fas fa-backward "></i> </a>
</div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<strong>Error!</strong>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('tasks.update', $hobbsTask->id) }}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Session Name:</strong>
<input type="text" name="session_name" class="form-control" value="{{ $hobbsTask->session_name }}">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>PID:</strong>
<input type="number" name="pid" value="{{ $hobbsTask->pid }}" />
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Path:</strong>
<input type="text" name="file_path" class="form-control" value="{{ $hobbsTask->file_path }}">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Type:</strong>
<input type="text" name="file_type" class="form-control" value="{{ $hobbsTask->file_type }}">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Size:</strong>
<input type="number" name="file_size" value="{{ $hobbsTask->file_size }}" />
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
@endsection
resources/views/Tasks/show.blade.php
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>{{ $hobbsTask->session_name }}</h2>
</div>
<div class="pull-right">
<a class="btn btn-primary" href="{{ route('tasks.index') }}" title="Go back"> <i class="fas fa-backward "></i> </a>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Session Name:</strong>
{{ $hobbsTask->session_name }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>PID:</strong>
{{ $hobbsTask->pid }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Path:</strong>
{{ $hobbsTask->file_path }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Type:</strong>
{{ $hobbsTask->file_type }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Size:</strong>
{{ $hobbsTask->file_size }}
</div>
</div>
</div>
@endsection
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HobbsTaskController;
Route::get('/', function () {
return view('welcome');
});
Route::resource('tasks', HobbsTaskController::class);
路由信息:
% php artisan route:list
+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api |
| | | | | | auth:api |
| | GET|HEAD | tasks | tasks.index | App\Http\Controllers\HobbsTaskController@index | web |
| | POST | tasks | tasks.store | App\Http\Controllers\HobbsTaskController@store | web |
| | GET|HEAD | tasks/create | tasks.create | App\Http\Controllers\HobbsTaskController@create | web |
| | GET|HEAD | tasks/{task} | tasks.show | App\Http\Controllers\HobbsTaskController@show | web |
| | PUT|PATCH | tasks/{task} | tasks.update | App\Http\Controllers\HobbsTaskController@update | web |
| | DELETE | tasks/{task} | tasks.destroy | App\Http\Controllers\HobbsTaskController@destroy | web |
| | GET|HEAD | tasks/{task}/edit | tasks.edit | App\Http\Controllers\HobbsTaskController@edit | web |
+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+
因为你的路由参数名是任务
您需要将 $hobbsTask 替换为 $task
在编辑和显示功能中。
你可以这样做
public function show(HobbsTask $task)
{
$hobbsTask = $task;
return view('tasks.show',compact('hobbsTask'));
}
public function edit(HobbsTask $task)
{
$hobbsTask = $task;
return view('tasks.edit', compact('hobbsTask'));
}
我使用 Laravel 8 创建了一个基本的 CRUD 站点。
创建的应用程序能够列出本地MySQL 数据库中的数据并创建新对象,但无法显示详细信息、编辑和删除对象。编辑页面上显示的错误是:
Missing required parameter for [Route: tasks.update] [URI: tasks/{task}] [Missing parameter: task]. (View: /Users/adv/Documents/workspace/unlocker/hobbs-admin/resources/views/tasks/edit.blade.php)
我在 edit.blade.php
中使用 var_dump($hobbsTask)
,发现 HobbsTask
对象是空的。怎么会?
另一方面,show.blade.php
根本没有显示任何数据。似乎它与编辑页面的问题相同。我错过了什么?
代码如下:
app/Http/Controllers/HobbsTaskController
<?php
namespace App\Http\Controllers;
use App\Models\HobbsTask;
use Illuminate\Http\Request;
class HobbsTaskController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$tasks = HobbsTask::latest()->paginate(5);
return view('tasks.index', compact('tasks'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('tasks.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'session_name' => 'required',
'pid' => 'required',
'file_path' => 'required',
'file_type' => 'required',
'file_size' => 'required'
]);
HobbsTask::create($request->all());
return redirect()->route('tasks.index')
->with('success', 'Task created successfully.');
}
/**
* Display the specified resource.
*
* @param \App\Models\HobbsTask $hobbsTask
* @return \Illuminate\Http\Response
*/
public function show(HobbsTask $hobbsTask)
{
return view('tasks.show', compact('hobbsTask'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Models\HobbsTask $hobbsTask
* @return \Illuminate\Http\Response
*/
public function edit(HobbsTask $hobbsTask)
{
return view('tasks.edit', compact('hobbsTask'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\HobbsTask $hobbsTask
* @return \Illuminate\Http\Response
*/
public function update(Request $request, HobbsTask $hobbsTask)
{
$request->validate([
'session_name' => 'required'
]);
$hobbsTask->update($request->all());
return redirect()->route('tasks.index')
->with('success', 'Task updated successfully');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\HobbsTask $hobbsTask
* @return \Illuminate\Http\Response
*/
public function destroy(HobbsTask $hobbsTask)
{
$hobbsTask->delete();
return redirect()->route('tasks.index')
->with('success', 'Task deleted successfully');
}
}
app/Models/HobbsTask.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class HobbsTask extends Model
{
use HasFactory;
protected $table = 'unlocker_tickets';
public $timestamps = true;
protected $fillable = [
'pid',
'session_name',
'file_type',
'file_path',
'file_size'
];
}
resources/views/Tasks/Index.blade.php
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Laravel 8 CRUD Example </h2>
</div>
<div class="pull-right">
<a class="btn btn-success" href="{{ route('tasks.create') }}" title="Create a task"> <i class="fas fa-plus-circle"></i>
</a>
</div>
</div>
</div>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered table-responsive-lg">
<tr>
<th>ID</th>
<th>Session Name</th>
<th>PID</th>
<th>File Path</th>
<th>File Type</th>
<th>File Size</th>
<th>Date Created</th>
<th>Actions</th>
</tr>
@foreach ($tasks as $task)
<tr>
<td>{{ $task->id }}</td>
<td>{{ $task->session_name }}</td>
<td>{{ $task->pid }}</td>
<td>{{ $task->file_path }}</td>
<td>{{ $task->file_type }}</td>
<td>{{ $task->file_size }}</td>
<td>{{ date_format($task->created_at, 'jS M Y') }}</td>
<td>
<form action="{{ route('tasks.destroy', $task->id) }}" method="POST">
<a href="{{ route('tasks.show', $task->id) }}" title="show">
<i class="fas fa-eye text-success fa-lg"></i>
</a>
<a href="{{ route('tasks.edit', $task->id) }}">
<i class="fas fa-edit fa-lg"></i>
</a>
@csrf
@method('DELETE')
<button type="submit" title="delete" style="border: none; background-color:transparent;">
<i class="fas fa-trash fa-lg text-danger"></i>
</button>
</form>
</td>
</tr>
@endforeach
</table>
{!! $tasks->links() !!}
@endsection
resources/views/Tasks/edit.blade.php
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Edit Task</h2>
</div>
<div class="pull-right">
<a class="btn btn-primary" href="{{ route('tasks.index') }}" title="Go back"> <i class="fas fa-backward "></i> </a>
</div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<strong>Error!</strong>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('tasks.update', $hobbsTask->id) }}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Session Name:</strong>
<input type="text" name="session_name" class="form-control" value="{{ $hobbsTask->session_name }}">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>PID:</strong>
<input type="number" name="pid" value="{{ $hobbsTask->pid }}" />
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Path:</strong>
<input type="text" name="file_path" class="form-control" value="{{ $hobbsTask->file_path }}">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Type:</strong>
<input type="text" name="file_type" class="form-control" value="{{ $hobbsTask->file_type }}">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Size:</strong>
<input type="number" name="file_size" value="{{ $hobbsTask->file_size }}" />
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
@endsection
resources/views/Tasks/show.blade.php
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>{{ $hobbsTask->session_name }}</h2>
</div>
<div class="pull-right">
<a class="btn btn-primary" href="{{ route('tasks.index') }}" title="Go back"> <i class="fas fa-backward "></i> </a>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>Session Name:</strong>
{{ $hobbsTask->session_name }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>PID:</strong>
{{ $hobbsTask->pid }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Path:</strong>
{{ $hobbsTask->file_path }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Type:</strong>
{{ $hobbsTask->file_type }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>File Size:</strong>
{{ $hobbsTask->file_size }}
</div>
</div>
</div>
@endsection
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HobbsTaskController;
Route::get('/', function () {
return view('welcome');
});
Route::resource('tasks', HobbsTaskController::class);
路由信息:
% php artisan route:list
+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api |
| | | | | | auth:api |
| | GET|HEAD | tasks | tasks.index | App\Http\Controllers\HobbsTaskController@index | web |
| | POST | tasks | tasks.store | App\Http\Controllers\HobbsTaskController@store | web |
| | GET|HEAD | tasks/create | tasks.create | App\Http\Controllers\HobbsTaskController@create | web |
| | GET|HEAD | tasks/{task} | tasks.show | App\Http\Controllers\HobbsTaskController@show | web |
| | PUT|PATCH | tasks/{task} | tasks.update | App\Http\Controllers\HobbsTaskController@update | web |
| | DELETE | tasks/{task} | tasks.destroy | App\Http\Controllers\HobbsTaskController@destroy | web |
| | GET|HEAD | tasks/{task}/edit | tasks.edit | App\Http\Controllers\HobbsTaskController@edit | web |
+--------+-----------+-------------------+---------------+--------------------------------------------------+------------+
因为你的路由参数名是任务
您需要将 $hobbsTask 替换为 $task 在编辑和显示功能中。
你可以这样做
public function show(HobbsTask $task)
{
$hobbsTask = $task;
return view('tasks.show',compact('hobbsTask'));
}
public function edit(HobbsTask $task)
{
$hobbsTask = $task;
return view('tasks.edit', compact('hobbsTask'));
}