austintoddj/canvas

Laravel 发布平台

资助包维护!
austintoddj

安装数: 72,687

依赖项: 0

建议者: 0

安全性: 2

星标: 3,245

关注者: 91

分支: 519

公开问题: 27

v6.0.54 2024-03-12 19:37 UTC

This package is auto-updated.

Last update: 2024-09-12 20:59:53 UTC


README

Homepage for trycanvas.app

Build Status Total Downloads Latest Stable Version License

简介

Canvas 是一个完全开源的包,可扩展您的现有 Laravel 应用程序,并在几分钟内创建一个博客。除了无干扰的写作体验外,您还可以查看您的内容的月度趋势,了解读者流量等!

系统要求

  • PHP >= 7.3
  • Laravel >= 6.0
  • Laravel 支持的五个数据库之一

安装

您可以使用 composer 将 Canvas 安装到您的 Laravel 项目中

composer require austintoddj/canvas

使用 canvas:install Artisan 命令发布资产和主要配置文件

php artisan canvas:install

使用 storage:link Artisan 命令创建符号链接,以确保文件上传可以从网络公开访问

php artisan storage:link

配置

发布 Canvas 的资产后,主要配置文件将位于 config/canvas.php。此文件允许您自定义应用程序使用该包的各个方面。

Canvas 默认在 /canvas 处公开其 UI。可以通过更新 pathdomain 选项来更改此设置

/*
|--------------------------------------------------------------------------
| Base Domain
|--------------------------------------------------------------------------
|
| This is the subdomain where Canvas will be accessible from. If the
| domain is set to null, Canvas will reside under the defined base
| path below. Otherwise, this will be used as the subdomain.
|
*/

'domain' => env('CANVAS_DOMAIN', null),

/*
|--------------------------------------------------------------------------
| Base Path
|--------------------------------------------------------------------------
|
| This is the URI where Canvas will be accessible from. If the path
| is set to null, Canvas will reside under the same path name as
| the application. Otherwise, this is used as the base path.
|
*/

'path' => env('CANVAS_PATH_NAME', 'canvas'),

有时,您可能希望在访问 Canvas 时应用自定义角色或权限。您可以在其中创建和附加任何额外的中间件

/*
|--------------------------------------------------------------------------
| Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will be attached to every route in Canvas, giving you
| the chance to add your own middleware to this list or change any of
| the existing middleware. Or, you can simply stick with the list.
|
*/

'middleware' => [
    'web',
],

Canvas 使用存储磁盘进行媒体上传。您可以在其中配置不同的文件系统选项

/*
|--------------------------------------------------------------------------
| Storage
|--------------------------------------------------------------------------
|
| This is the storage disk Canvas will use to put file uploads. You may
| use any of the disks defined in the config/filesystems.php file and
| you may also change the maximum upload size from its 3MB default.
|
*/

'storage_disk' => env('CANVAS_STORAGE_DISK', 'local'),

'storage_path' => env('CANVAS_STORAGE_PATH', 'public/canvas'),

'upload_filesize' => env('CANVAS_UPLOAD_FILESIZE', 3145728),

角色 & 权限

Canvas 默认包含 3 个预定义角色

  • 贡献者(可以撰写和管理自己的帖子,但不能发布它们)
  • 编辑者(可以发布和管理帖子,包括其他用户的帖子)
  • 管理员(可以做任何事,看到任何事)

安装 Canvas 的新版本时,将自动设置一个默认管理员用户。从那里,您可以对用户执行任何基本 CRUD 操作,并分配他们的各种角色。

Canvas UI

想要一个美丽、Medium.com 启发的前端吗? 使用 canvas:ui Artisan 命令安装脚手架

php artisan canvas:ui

生成前端脚手架后,您的 package.json 文件将包含安装和编译所需的必要依赖项

# Using NPM
npm install
npm run dev

# Using Yarn
yarn
yarn dev

就是这样!您可以导航到 /canvas-ui 并亲自检查。您可以自由修改任何您想要的方面。

Unsplash 集成

想要访问整个 Unsplash 库吗?https://unsplash.com/oauth/applications 上设置一个新应用程序,获取您的访问密钥,并更新 config/canvas.php

/*
|--------------------------------------------------------------------------
| Unsplash Integration
|--------------------------------------------------------------------------
|
| Visit https://unsplash.com/oauth/applications to create a new Unsplash
| app. Use the confidential Access Key given to you to integrate with
| the API. Note that demo apps are limited to 50 requests per hour.
|
*/

'unsplash' => [
    'access_key' => env('CANVAS_UNSPLASH_ACCESS_KEY'),
]

电子邮件通知

想要每周摘要吗? Canvas 允许用户接收其撰写的内容的每周摘要。一旦您的应用程序 配置了发送邮件,请更新 config/canvas.php

/*
|--------------------------------------------------------------------------
| E-Mail Notifications
|--------------------------------------------------------------------------
|
| This option controls e-mail notifications that will be sent via the
| default application mail driver. A default option is provided to
| support the notification system as an opt-in feature.
|
|
*/

'mail' => [
    'enabled' => env('CANVAS_MAIL_ENABLED', false),
]

由于此功能在 Laravel 的调度器 上运行,因此您需要将以下 cron 条目添加到您的服务器

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

API

安装Canvas UI将是最高效的方式,以前端界面来展示你的数据。然而,许多用户会选择手动创建,因为这给了他们设计美学的灵活性。

使用published范围将允许你仅检索过去有发布日期的文章

Canvas\Models\Post::published()->get()

你也可以使用draft范围来检索相反的内容

Canvas\Models\Post::draft()->get()

为了返回单个文章,你可能需要通过一个特定的slug来找到它,以及包含相关实体,例如

$post = Canvas\Models\Post::with('user', 'tags', 'topic')->firstWhere('slug', $slug);

重要:在返回文章的相同方法中,确保触发PostViewed事件,否则访问/浏览将不会被记录。

event(new Canvas\Events\PostViewed($post));

你可以通过一个特定的slug找到一个标签

Canvas\Models\Tag::with('posts')->firstWhere('slug', $slug);

类似的查询也可以用于一个主题

Canvas\Models\Topic::with('posts')->firstWhere('slug', $slug);

可以通过idusernameemail来检索用户

$user = Canvas\Models\User::find($id);
$user = Canvas\Models\User::firstWhere('username', $username);
$user = Canvas\Models\User::firstWhere('email', $email);

此外,你还可以返回与相关主题关联的用户发布的文章

$user->posts()->published()->with('topic')

更新

Canvas遵循语义化版本控制,并以MAJOR.MINOR.PATCH数字递增版本。

  • 主版本将包含重大更改,因此请遵循升级指南以获取逐步分解
  • 次要版本和补丁版本不应包含重大更改,因此你可以安全地按照以下步骤更新包

你可以使用composer更新你的Canvas安装

composer update

运行任何新的迁移使用canvas:migrate Artisan命令

php artisan canvas:migrate

使用canvas:publish Artisan命令重新发布资产

php artisan canvas:publish

为了保持资产更新并避免未来更新中的问题,你可以在应用程序的composer.json文件中将canvas:publish命令添加到post-update-cmd脚本中

{
    "scripts": {
        "post-update-cmd": [
            "@php artisan canvas:publish --ansi"
        ]
    }
}

贡献

感谢您考虑为Canvas做出贡献!贡献指南可以在这里找到:

测试

使用以下命令运行测试

composer test

故障排除

如果您遇到问题,请随时打开新问题或检查讨论论坛,看看其他人是否遇到过类似的问题。

许可证

Canvas是开源软件,许可协议为MIT许可证

致谢