sethsharp/blog-crud

一个博客 CRUD 包


README

Latest Version on Packagist Total Downloads

博客

这是一个完全开发的Laravel博客CRUD包,允许您管理博客、标签和集合。

这个包是如何工作的? 此包提供了一些模型,并为创建项目中的博客页面提供了一个良好的基础。主要功能包括

  1. 一个具有添加标签并将它作为集合一部分能力的博客模型
  2. 内置的角色系统和策略,以控制用户可以执行哪些操作
  3. 内置的工厂,以简化数据填充、开发和测试
  4. 使CRUD变得简单的文件,包括操作和请求

此包的主要3个模型是

  1. 博客:包含创建博客所需的所有列以及SEO列
  2. 标签:帮助用户理解博客的基本主题(一个博客有多个标签)
  3. 集合:用于类似教程系列等概念(一个博客属于一个集合)

示例用例

  1. 一个个人博客页面,您希望有一个简单的实现来管理博客 - 查看此存储库
  2. 一个新的博客页面,您可以在其中添加多个用户,并通过作者规则、额外的角色和策略进行限制

此包不提供什么 此包尽可能地非主观,因此控制器、前端组件和额外的逻辑由您自行实现。

开发步骤

安装(通过composer)

composer require sethsharp/blog-crud

添加服务提供者

将其添加到您的 config/app.php

'providers' => [
    \SethSharp\BlogCrud\BlogServiceProvider::class
]

发布迁移

然后发布迁移: php artisan vendor:publish --tag="blog-crud-migrations"

发布配置文件

当您需要修改值以适应项目时使用

php artisan vendor:publish --tag="blog-crud-config"

您可以覆盖的内容包括

  1. 模型:允许您创建自己的模型 - 它们会自动注入到其他包模型中的关系内
  2. 图片驱动器:我们使用laravel-intervention库进行图片缩放 - 默认为gd(),但可用imagick()
  3. 桶路径:允许您指定本地和生产环境中S3桶的路径

警告:当在配置中覆盖模型时,您将无法将模型传递给现有操作,因为它期望的是包模型。这将在未来版本中修复

其他要求

文件系统 此包在文件上传方面依赖于AWS S3逻辑,通过博客封面或您可以在博客中上传的图片。因此,请确保您的AWS凭证已正确配置,特别是您的项目中的此配置文件 config/filesystems

's3' => [
    'driver' => 's3',
    'key' => env('AWS_ACCESS_KEY_ID'),
    'secret' => env('AWS_SECRET_ACCESS_KEY'),
    'region' => env('AWS_DEFAULT_REGION'),
    'bucket' => env('AWS_BUCKET'),
    'url' => env('AWS_URL'),
    'endpoint' => env('AWS_ENDPOINT'),
    'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
    'throw' => false,
],

其他要求

  1. 鼓励您探索此包,它非常直接简单。但您需要了解此包中包含的内容,以适应您的用例。
  2. 此包实现了Coding Labs Laravel Roles,因此还需要进行此配置(别担心,它很棒且简单!)

工厂集成

所有模型都集成了工厂,以简化开发,因此请确保使用它们。

策略

为包中每个可用的模型提供了策略,以添加验证/保护到您的路由。它们必须在您的 AppServiceProvider 中启动,如下所示

public function boot()
{
    Gate::policy(Blog::class, BlogPolicy::class);
    Gate::policy(Tag::class, TagPolicy::class);
    Gate::policy(Collection::class, CollectionPolicy::class);
}

更新博客

use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use SethSharp\BlogCrud\Models\Blog\Blog;
use SethSharp\BlogCrud\Actions\Blogs\UpdateBlogAction;
use SethSharp\BlogCrud\Requests\Blogs\UpdateBlogRequest;

class UpdateBlogController extends Controller
{
    public function __invoke(Blog $blog, UpdateBlogRequest $updateBlogRequest, UpdateBlogAction $updateBlogAction): RedirectResponse
    {
        $blog = $updateBlogAction($blog, $updateBlogRequest);

        $drafted = (bool)$updateBlogRequest->input('is_draft');

        return redirect()
            ->route('dashboard.blogs.index')
            ->with('success', $blog->title . ' successfully ' . ($drafted ? 'drafted' : 'published'));
    }
}

这是一个示例 UpdateBlogController,使用该包中的所有文件;BlogUpdateBlogRequestUpdateBlogAction。阅读这些文件将使您了解它们的期望——所以确保您传递正确的信息就取决于您了。

这个包是如何依赖S3的

S3用于您内容中的任何图像——无论是动态上传还是通过博客封面上传。您可以使用动作 StoreFileActionDestoryFileAction 在内容中使用图像。为了最佳S3管理,您还可以使用 StoreBlogFileRequest - 示例请参考 这里。这个示例将允许您在内容中动态上传文件,然后当您使用动作保存博客时,它还会调用 CleanBlogContentAction,确保您的S3和数据库级别同步,使文件管理变得非常简单。确保您的内容中没有未使用的文件。

如果您想将图像融入内容中或构建一个可以集成编辑器的应用程序,那么远比其他选择更好的是 TipTap Editor - 这就是我使用的编辑器!

开源

这是一个开源项目,因此欢迎贡献!无论您是想添加新功能、修复错误还是改进文档,您的帮助都非常受欢迎。提交您的PR进行审查,我将尽快进行审查。