👁 查看:BlogController.php
路径:/home/boguraj1/.trash/app/Http/Controllers/Admin/BlogController.php
大小:2.65 KB · 修改:2026-07-23 16:13:46 · 权限:0644 · 可写
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\BlogPost;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class BlogController extends Controller
{
    public function index()
    {
        $posts = BlogPost::latest()->paginate(20);
        return view('admin.blog.index', compact('posts'));
    }

    public function create()
    {
        return view('admin.blog.create');
    }

    public function store(Request $request)
    {
        $data = $request->validate([
            'title'        => 'required|string|max:255',
            'slug'         => 'nullable|string|unique:blog_posts,slug',
            'excerpt'      => 'nullable|string',
            'content'      => 'required|string',
            'image'        => 'nullable|image|max:4096',
            'status'       => 'boolean',
            'published_at' => 'nullable|date',
        ]);

        $data['slug']         = $data['slug'] ?? Str::slug($data['title']);
        $data['status']       = $request->boolean('status', false);
        $data['published_at'] = $data['published_at'] ?? ($data['status'] ? now() : null);

        if ($request->hasFile('image')) {
            $data['image'] = $request->file('image')->store('blog', 'public');
        }

        BlogPost::create($data);
        return redirect()->route('admin.blog.index')->with('success', 'Blog post published.');
    }

    public function edit(BlogPost $blog)
    {
        return view('admin.blog.edit', compact('blog'));
    }

    public function update(Request $request, BlogPost $blog)
    {
        $data = $request->validate([
            'title'        => 'required|string|max:255',
            'slug'         => 'nullable|string|unique:blog_posts,slug,' . $blog->id,
            'excerpt'      => 'nullable|string',
            'content'      => 'required|string',
            'image'        => 'nullable|image|max:4096',
            'status'       => 'boolean',
            'published_at' => 'nullable|date',
        ]);

        $data['slug']   = $data['slug'] ?? Str::slug($data['title']);
        $data['status'] = $request->boolean('status', false);

        if (!$blog->published_at && $data['status']) {
            $data['published_at'] = now();
        }

        if ($request->hasFile('image')) {
            $data['image'] = $request->file('image')->store('blog', 'public');
        }

        $blog->update($data);
        return redirect()->route('admin.blog.index')->with('success', 'Blog post updated.');
    }

    public function destroy(BlogPost $blog)
    {
        $blog->delete();
        return redirect()->route('admin.blog.index')->with('success', 'Blog post deleted.');
    }
}