为什么图片加载不出来?
我在用Laravel,图片加载不出来。
我不知道这是否与我的PostController有关:
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class PostController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$posts = Post::all();
return view('posts.gallery', compact('posts'));
}
/**
* Show the form for creating a new resource.
*/
// public function create()
//{
// return view('posts.create');
// }
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required',
'description' => 'required',
'image' => 'nullable|image|max:2048'
]);
if ($request->hasFile('image')) {
$validated['image'] = $request->file('image')->store('images', 'public');
}
Post::create($validated);
return redirect()->route('posts.index')->with('success','Post created successfully!');
}
/**
* get the latest post
*/
public function home()
{
$latestpost = Post::latest()->first();
return view('home', ['latestpost' => $latestpost]);
}
/**
* Display the specified resource.
*/
public function show(Post $post)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit($id)
{
$post = Post::findOrFail($id);
return view('posts.edit', compact('post'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, $id)
{
$validated = $request->validate([
'title' => 'required',
'description' => 'required',
]);
$post = Post::findOrFail($id); // find the post
$post->update($validated); //update post w new data
return redirect()->route('posts.gallery')->with('success','Post updated successfully!');
}
/**
* Remove the specified resource from storage.
*/
public function destroy($id)
{
$post = Post::findOrFail($id); // find the post
$post->delete(); //update post w new data
return redirect()->route('posts.gallery')->with('success','Post deleted successfully!');
}
}
我想在这里显示这些帖子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1> all posts</h1>
<a href="{{ route('posts.create') }}"> create new post</a>
@foreach($posts as $post)
<h2>{{ $post->title }}</h2>
<p>{{ $post->description }}</p>
@if($post->image)
<img src="{{ asset($post->image) }}" alt="{{ ($post->title) }}">
@endif
<p>{{ $post->created_at }}</p>
@endforeach
<a href="{{ route('home') }}">gohome</a>
</body>
</html>
这段代码对其他部分都能工作,只有图片不行。图片无论怎样都不显示,只显示替代文本。当我点击图片图标并选“检查”时,确实显示了正确的URL。
我已经尝试删除storage文件夹,并使用php artisan storage:lin重新创建它。当我运行php artisan storage:link时,它会提示“link already exists”,但如果链接没问题,为什么图片都不显示?
这是我的web.php文件,看看是不是路由方面的问题:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LoginController;
use App\Http\Controllers\PostController;
Route::get('/welcome', function () {
return view('welcome');
})->name('login');
Route::get('/', [PostController::class, 'home'])->name('home');
Route::post('login', LoginController::class)->name('login.attempt');
Route::view('dashboard', 'dashboard')->name('dashboard');
Route::resource('posts', PostController::class);
解决方案
问题出现在这里:
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required',
'description' => 'required',
'image' => 'nullable|image|max:2048'
]);
if ($request->hasFile('image')) {
$validated['image'] = $request->file('image')->store('images', 'public');
}
Post::create($validated);
return redirect()->route('posts.index')->with('success','Post created successfully!');
}
你的验证规则写着图片的最大尺寸是2048,超过这个大小的图片将被视为无效。你的图片很可能比这个大。然后你的代码还是创建了一个帖子并进行重定向。相反,你可能需要确保验证与你的预期一致,并且在调试时,你还需要确保如果传入的图片无效,就不会保存这个帖子。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。