neo / laravel-early-access
为您的Laravel应用程序添加早期访问页面。
Requires
- php: ^7.2|^8.0
- ext-json: *
- illuminate/support: ^6.0|^7.0|^8.0
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ^4.0|^5.0
- phpunit/phpunit: ^8.0|^9.0
- sempro/phpunit-pretty-print: ^1.0
README
此软件包可以轻松地将早期访问模式添加到现有应用程序中。这在您想推出产品并需要收集想要早期访问应用程序的人的电子邮件地址时非常有用。
查看contributing.md,以查看待办事项列表。
⚠️ 此版本支持Laravel 6及以上。如果您需要Laravel 5支持,请使用版本1.x。
安装
通过Composer
要通过Composer安装,请在Laravel应用程序的根目录中运行以下命令
$ composer require neo/laravel-early-access
在app/Http/Middleware/Kernel.php
中,将中间件Neo\EarlyAccess\Http\Middleware\CheckForEarlyAccessMode
注册到web
组中间件底部。
<?php // [...] 'web' => [ \App\Http\Middleware\EncryptCookies::class, // [...] \Neo\EarlyAccess\Http\Middleware\CheckForEarlyAccessMode::class, ], // [...]
接下来,在您的.env
文件中添加/更新MAIL_*
密钥。请确保包含MAIL_FROM_*
密钥,因为它在发送欢迎或告别电子邮件给订阅者时是必需的。
此外,您还可以选择将以下环境变量添加到您的.env
文件中
EARLY_ACCESS_ENABLED=true
EARLY_ACCESS_URL="/early-access"
EARLY_ACCESS_LOGIN_URL="/login"
EARLY_ACCESS_TWITTER_HANDLE=NeoIghodaro
EARLY_ACCESS_VIEW="early-access::index"
EARLY_ACCESS_SERVICE_DRIVER=database
EARLY_ACCESS_SERVICE_DB_TABLE=subscribers
现在迁移所需的表
$ php artisan migrate
并发布所需的资源
$ php artisan vendor:publish --provider="Neo\EarlyAccess\EarlyAccessServiceProvider"
这将使配置、迁移、视图和资源在您的应用程序目录中可用,以便您可以根据需要自定义它们。
提示: 您可以附加
--tag=assets
标志来仅发布所需的资源文件。其他可用的标签值包括:config
、translations
、migrations
、views
和assets
。
要激活早期访问,您可以执行以下任一操作
- 运行命令
$ php artisan early-access --activate
- 在您的
.env
文件中将EARLY_ACCESS_ENABLED
设置为true
提示: 使用Artisan命令可以添加允许绕过早期访问屏幕的IP地址。
$ php artisan early-access --allow=127.0.0.1 --allow=0.0.0.0
请注意,已登录用户也会绕过早期访问屏幕。
配置
$ php artisan vendor:publish --provider="Neo\EarlyAccess\EarlyAccessServiceProvider" --tag=config
配置选项
-
enabled
- 设置模式是否启用。在优先级方面,这是检查是否应显示早期访问屏幕的最后一件事。首先检查登录状态,然后检查Artisan命令状态,然后检查此值。默认: false
-
url
- 早期访问屏幕将要显示的URL。如果客户端没有访问权限并且模式已启用,则客户端将被重定向到此URL。您可以将其设置为/
或任何其他现有路由。默认: /early-access
-
login_url
- 您应用程序登录页面的URL。即使早期访问模式已打开,此URL也将自动绕过。默认: /login
-
twitter_handle
- 在通过电子邮件发送订阅确认时使用。用户将有选择通过您指定的标签进行推文。 -
view
- 要加载的早期访问屏幕视图。您可以发布视图并进行自定义,或保留默认设置。默认: early-access::index
。 -
service
- 这是订阅驱动程序。有关如何创建自己的驱动程序的说明,请参见下文。默认: database
。 -
services.database.table_name
- 数据库表名。如果您想更改数据库表名,这将很有用。但是,您需要在运行迁移之前这样做。默认值:subscribers
-
notifications
- 默认通知类。如果您想更改用户在订阅或退订时如何接收通知,可以使用自己的通知类。
使用 /
或现有路由作为早期访问 URL
要在您的应用程序中使用 /
或现有路由作为早期访问 URL,您需要执行以下操作
首先,在 config/app.php
中 App\Providers\RouteServiceProvider::class
下方手动注册服务提供者。
<?php return [ 'providers' => [ // [...] App\Providers\RouteServiceProvider::class, Neo\EarlyAccess\EarlyAccessServiceProvider::class, // [...] ], // [...] ];
接下来,打开您的 composer.json
文件,并将包添加到 dont-discover
数组中
// [...]
"laravel": {
"dont-discover": [
"neo/laravel-early-access"
]
},
// [...]
现在运行 composer dump-autoload -o
,它应该可以正常工作。
创建自己的订阅服务驱动程序
默认情况下,有一个数据库驱动程序管理所有用户。但是,您可以决定为其他服务(如 Mailchimp 等)创建自己的驱动程序。(如果您这样做,请考虑提交一个包含驱动程序的 PR)。
要开始,您需要创建一个新的类,该类实现了服务提供者类
<?php namespace App\Services\SubscriptionServices; use Neo\EarlyAccess\Contracts\Subscription\SubscriptionProvider; class MailchimpService implements SubscriptionProvider { public function add(string $email, string $name = null): bool { // Implement adding a new subscriber... } public function remove(string $email): bool { // Implement removing a subscriber... } public function verify(string $email): bool { // Implement verifying a subscriber } /** * @return \Neo\EarlyAccess\Subscriber|false */ public function findByEmail(string $email) { // Implement returning a subscriber from email } }
接下来,在您的 app/Providers/AppServiceProvider
类的 register
方法中注册您的服务
<?php // [...] $this->app->bind('early-access.mailchimp', function () { return new \App\Services\SubscriptionServices\MailchimpService; }); // [...]
注意:保留
early-access.
命名空间。这是必需的。只需将您的服务名称附加到命名空间中,如上所示。
接下来,转到您的发布配置,并将服务驱动程序从 database
更改为 mailchimp
。就这样。
变更日志
有关最近更改的更多信息,请参阅变更日志。
测试
$ composer test
贡献
有关详细信息和工作清单,请参阅contributing.md。
安全
如果您发现任何与安全相关的问题,请通过电子邮件而不是问题跟踪器联系作者。
致谢
- Neo Ighodaro
- Caneco(为标志设计)
- 所有贡献者
许可证
有关更多信息,请参阅许可证文件。