sethsharp / blog-crud
一个博客 CRUD 包
Requires
- php: ^8.2
- aws/aws-sdk-php: ^3.298
- codinglabsau/laravel-roles: ^2.4
- illuminate/support: ^10.0|^11.0
- intervention/image-laravel: ^1.2
- laravel/slack-notification-channel: ^3.2
- dev-main
- 2.x-dev
- v2.0.1
- v2.0
- v1.1.11
- v1.1.10
- v1.1.9
- v1.1.8
- v1.1.7
- v1.1.6
- v1.1.5
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1.0
- v1.0.9
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- dev-add-missing-relationships-on-Like-model
- dev-sharpie/dev-367-change-how-likes-work
- dev-sharpie/dev-364-change-how-comments-work
- dev-sharpie/dev-369-ensure-sizes-are-in-all-rules-in-requests
- dev-sharpie/dev-363-file-belongs-under-blogmodels-namespace
This package is auto-updated.
Last update: 2024-09-18 03:17:22 UTC
README
博客
这是一个完全开发的Laravel博客CRUD包,允许您管理博客、标签和集合。
这个包是如何工作的? 此包提供了一些模型,并为创建项目中的博客页面提供了一个良好的基础。主要功能包括
- 一个具有添加标签并将它作为集合一部分能力的博客模型
- 内置的角色系统和策略,以控制用户可以执行哪些操作
- 内置的工厂,以简化数据填充、开发和测试
- 使CRUD变得简单的文件,包括操作和请求
此包的主要3个模型是
- 博客:包含创建博客所需的所有列以及SEO列
- 标签:帮助用户理解博客的基本主题(一个博客有多个标签)
- 集合:用于类似教程系列等概念(一个博客属于一个集合)
示例用例
- 一个个人博客页面,您希望有一个简单的实现来管理博客 - 查看此存储库
- 一个新的博客页面,您可以在其中添加多个用户,并通过作者规则、额外的角色和策略进行限制
此包不提供什么 此包尽可能地非主观,因此控制器、前端组件和额外的逻辑由您自行实现。
开发步骤
安装(通过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"
您可以覆盖的内容包括
- 模型:允许您创建自己的模型 - 它们会自动注入到其他包模型中的关系内
- 图片驱动器:我们使用laravel-intervention库进行图片缩放 - 默认为
gd()
,但可用imagick()
- 桶路径:允许您指定本地和生产环境中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, ],
其他要求
- 鼓励您探索此包,它非常直接简单。但您需要了解此包中包含的内容,以适应您的用例。
- 此包实现了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
,使用该包中的所有文件;Blog
、UpdateBlogRequest
和 UpdateBlogAction
。阅读这些文件将使您了解它们的期望——所以确保您传递正确的信息就取决于您了。
这个包是如何依赖S3的
S3用于您内容中的任何图像——无论是动态上传还是通过博客封面上传。您可以使用动作 StoreFileAction
和 DestoryFileAction
在内容中使用图像。为了最佳S3管理,您还可以使用 StoreBlogFileRequest
- 示例请参考 这里。这个示例将允许您在内容中动态上传文件,然后当您使用动作保存博客时,它还会调用 CleanBlogContentAction
,确保您的S3和数据库级别同步,使文件管理变得非常简单。确保您的内容中没有未使用的文件。
如果您想将图像融入内容中或构建一个可以集成编辑器的应用程序,那么远比其他选择更好的是 TipTap Editor - 这就是我使用的编辑器!
开源
这是一个开源项目,因此欢迎贡献!无论您是想添加新功能、修复错误还是改进文档,您的帮助都非常受欢迎。提交您的PR进行审查,我将尽快进行审查。