本书未发布

3.6. 实现文档控制器

未匹配的标注

我们需要在控制器中实现文档的CRUD操作。

步骤

  1. 打开app/Http/Controllers/DocumentController.php文件。
  2. 添加以下方法:
namespace App\Http\Controllers;

use App\Models\Document;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class DocumentController extends Controller {
    public function index() {
        $documents = Document::all();
        return view('documents.index', compact('documents'));
    }

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

    public function store(Request $request) {
        $request->validate([
            'name' => 'required|string|max:255',
            'slug' => 'required|string|max:255|unique:documents',
            'description' => 'nullable|string',
            'cover_image' => 'nullable|string',
            'is_chaptered' => 'boolean',
            'auto_numbering' => 'boolean',
            'auto_toc' => 'boolean',
            'is_public' => 'boolean',
            'password' => 'nullable|string',
        ]);

        $document = new Document([
            'user_id' => auth()->id(),
            'name' => $request->name,
            'slug' => Str::slug($request->slug),
            'description' => $request->description,
            'cover_image' => $request->cover_image,
            'is_chaptered' => $request->is_chaptered,
            'auto_numbering' => $request->auto_numbering,
            'auto_toc' => $request->auto_toc,
            'is_public' => $request->is_public,
            'password' => $request->password,
        ]);

        $document->save();

        return redirect()->route('documents.index')->with('success', 'Document created successfully.');
    }

    public function show(Document $document) {
        return view('documents.show', compact('document'));
    }

    public function edit(Document $document) {
        return view('documents.edit', compact('document'));
    }

    public function update(Request $request, Document $document) {
        $request->validate([
            'name' => 'required|string|max:255',
            'slug' => 'required|string|max:255|unique:documents,slug,'.$document->id,
            'description' => 'nullable|string',
            'cover_image' => 'nullable|string',
            'is_chaptered' => 'boolean',
            'auto_numbering' => 'boolean',
            'auto_toc' => 'boolean',
            'is_public' => 'boolean',
            'password' => 'nullable|string',
        ]);

        $document->update([
            'name' => $request->name,
            'slug' => Str::slug($request->slug),
            'description' => $request->description,
            'cover_image' => $request->cover_image,
            'is_chaptered' => $request->is_chaptered,
            'auto_numbering' => $request->auto_numbering,
            'auto_toc' => $request->auto_toc,
            'is_public' => $request->is_public,
            'password' => $request->password,
        ]);

        return redirect()->route('documents.index')->with('success', 'Document updated successfully.');
    }

    public function destroy(Document $document) {
        $document->delete();
        return redirect()->route('documents.index')->with('success', 'Document deleted successfully.');
    }
}

解释

  • CRUD操作:控制器中的方法实现了文档的创建、读取、更新和删除操作。
  • 请求验证:使用validate方法验证请求数据,确保数据的合法性。

好处

  • 逻辑清晰:每个方法处理特定的CRUD操作,逻辑清晰,便于维护。
  • 数据验证:在保存数据之前进行验证,确保数据的完整性和合法性。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~