- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 laravel 的新手,一直在与 cashier 合作开发我正在开发的网络应用程序。在我的应用程序中,用户创建了他们的帐户和公司,并允许他们使用该应用程序。因为一个公司可以有很多用户,我需要收银员检查公司是否有订阅。
在cashier docs使用 Stripe,我已经将其设置为预先不需要信用卡,他们可以使用该系统 14 天,直到系统提示您提供信用卡。
到目前为止,我已经成功地在我的公司表上创建了出纳员列,并根据文档添加了订阅表。
add_cashier_table_fields.php 迁移文件:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class AddCashierTableFields extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
Schema::table('companies', function ($table) {
$table->string('stripe_id')->nullable();
$table->string('card_brand')->nullable();
$table->string('card_last_four')->nullable();
$table->timestamp('trial_ends_at')->nullable();
});
Schema::create('subscriptions', function ($table) {
$table->increments('id');
$table->integer('company_id');
$table->string('name');
$table->string('stripe_id');
$table->string('stripe_plan');
$table->integer('quantity');
$table->timestamp('trial_ends_at')->nullable();
$table->timestamp('ends_at')->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
}
}
然后在我的公司模型中,我按照建议添加了 Billable 特征。Company.php - 模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Laravel\Cashier\Billable;
class Company extends Model
{
use Billable;
protected $dates = [
'trial_ends_at',
'subscription_ends_at'
];
protected $fillable = [
'company_name',
'trial_ends_at',
'subscription_ends_at'
];
protected $cardUpFront = false;
public function users()
{
return $this->hasMany(\App\User::class);
}
}
现在在我的 RegisterController.php 文件中,当公司创建时,它会记录从那天起 14 天后的日期,并添加到 'trial_ends_at'
列Auth/RegisterController.php
<?php
namespace App\Http\Controllers\Auth;
use App\User;
use App\Company;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\RegistersUsers;
use Carbon\Carbon;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after login / registration.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'company_name' => 'required|unique:companies,company_name',
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|min:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return User
*/
protected function create(array $data)
{
$company = \App\Company::create([
'company_name'=> $data['company_name'],
'trial_ends_at' => Carbon::now()->addDays(14), //Collect CC# 14 days from now
]);
$user = $company->users()->create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
$user->attachRole(1); //Admin role
return $user;
}
}
我正在尝试检查当前订阅是否在其试用期内或未使用
if ($company->onTrial()) {}
我想既然我需要限制对整个系统的访问(除了注册页面),我应该使用中间件来检查订阅状态。所以我使用以下内容创建了 Subscription.php 中间件:
<?php
namespace App\Http\Middleware;
use Closure;
use App\User;
use App\Company;
use Illuminate\Support\Facades\Auth;
class Subscription
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check()){
//dd($request->user);
; $companyID = Auth::user()->company_id;
$company = Company::find($companyID);
dd($company->onTrial());
if($company->onTrial()){
return redirect('order');
}
}
return $next($request);
}
}
问题:如果订阅未激活,将收银员附加到公司(而不是每个用户)并限制对系统的访问的最佳方式是什么?当我 var_dump($company->onTrial())
它总是打印 false 时?我确定日期是今年早些时候的,所以我应该已经过了试用时间,但无论我是否在试用时间范围内,它总是打印错误。这是我想要做的最好的方法吗?抱歉所有代码,我想给大家完整的图片,因为网上关于这个的信息很少。
我唯一能看到的与other posts about this topic 不同的是是我的公司模型扩展模型而不是可验证的。我已验证订阅已添加到我的 kernel.php 文件中,并且中间件已在我的路由文件中注册。
最佳答案
事实证明这是有效的。当我在数据库中手动更改我的日期以使其不在我的试用期时,它会返回 false,同样,如果我在试用期,它会返回 true。在我的例子中,我需要检查 onTrial()
以及当前 url 是否为 localhost:8000/order - 如果不是,则应用程序将他们重定向到该订单页面,直到他们输入他们的卡信息。我在这里发布我的最终中间件,以防将来有人遇到类似情况并需要功能代码。 (仍然不知道这是否是最好的方法,但它有效)
<?php
namespace App\Http\Middleware;
use Closure;
use App\User;
use App\Company;
use Illuminate\Support\Facades\Auth;
class Subscription
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check()){
//dd($request->user);
$companyID = Auth::user()->company_id;
$company = Company::find($companyID);
//dd($company->onTrial());
if(!$company->onTrial() && $request->path() != 'order'){ //If trial has expired redirect to order page
return redirect('order');
}
}
return $next($request);
}
}
关于php - 公司 table 上的 Laravel 5 和 Cashier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130446/
有谁知道是否可以在 Azure Authenticator 应用程序中向帐户添加自定义图像?对于我们的所有帐户,它始终显示上传到 AAD 的用户照片或通用徽章图像 我们希望将我们公司的图像添加到帐户中
我正在将分离的实体传递给 persist: model。公司当我使用@OneToMany映射时。我尝试了不同的方法但结果相同。我添加了 @OneToMany 和 CascadeTypes Persis
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我正在尝试为多家公司生产的产品、他们的配件以及产品和配件与客户账户的关联设计一个数据库。 您将如何设计这样的数据库来实现此功能? 商业规则 一个产品总是与一个公司相关联,一个公司可以有很多产品。 除产
这更像是一个普遍问题,即哪个方向对公司来说是更好的投资。 我们公司的核心业务应用程序是用 Visual FoxPro 编写的,已有大约 9 年以上的历史。该数据库庞大,超过 15 GB,核心逻辑复杂,
我刚刚尝试创建一个安装在 Android 上的应用程序列表。我想这样做,以便在备份并将手机重置为出厂设置之前获得已安装的应用程序列表。 到目前为止一切顺利,我有以下信息: 包名 友好的名字 版本号/代
我有一个包含公司及其产品的数据库,我想要每个公司拥有单独的产品 ID 序列。 我知道postgresql做不到这个,唯一的办法就是每个公司都有一个单独的序列,但这很麻烦。 我想到了一个解决方案,用一个
我正在使用带有 m2e 的 Eclipse Indigo(它连接到 Maven 3.0.3 的外部二进制文件)。 现在,我的应用程序的预期结构如下: Company-parent --Project-
我有一个关于 Lucene/Solr 的问题。 我正在尝试解决一般(公司)名称匹配问题。 让我举一个过于简单的例子: 我们有两个(可能很大)名称列表,即 list_A 和 list_B。我们想找到两个
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在开发一些通过企业计划分发到公司 iPad 上的应用程序(因此我/公司可以完全控制它们)。在公司拥有的设备的上下文中,什么是“正确的”(如果有的话)识别运行应用程序的设备的方法? 按照此处的建议创
我的 SQL 数据库中有两个表: 公司: ID(自增) 姓名 地址 ... 员工: ID(自增) 公司编号 internal_id 姓名 姓氏 问题是我想要一个与他们所属的公司相关的员工 ID (in
在为用户获取公司列表时,它会为没有 Logo 的公司抛出 500 错误代码。 使用 logo-url 参数查询: curl "https://api.linkedin.com/v1/companies
如何在不访问的情况下获取 Liferay 中的全局(公司)组 ID ThemeDisplay ? P.S.:与 ThemeDisplay很简单:themeDisplay.getCompanyGroup
有人可以帮助我以最佳方式在流畅的 nHibernate 中映射以下情况吗? Address 类用于 Client 和 Company。如何在 SQL 中最有效地存储它?映射应该是什么样的?我已经考虑过
我是数据库设计新手,请给我一些建议。 1 When should I use a composite index? im not sure what does index does, but i do
我有一个为 A 公司完成的 Grails 应用程序。现在需要对 B 公司进行一些更改。 我不想复制整个项目,因为它会在以后产生问题(代码重复、硬管理、修复双方的错误等) 相反,我希望有一些公司特定的代
我正在考虑使用一个 image 表来存储任何其他独立表的图像,例如 user、product 等... (当然,独立表的任何单个实例(例如作为用户的John Smith,以及作为产品的笔记本电脑) )
我正在尝试为 Vuzix M300 智能眼镜开发应用程序。我已经通过 Android SDK Manager 安装了 Vuzix SDK。我已按照 Vuzix 文档中提到的所有步骤进行操作。我还将编译
我正准备将我的第一个 iOS 提交到应用商店。我目前正在权衡为我的开发者帐户创建 LLC 以提交到应用商店的利弊,而不是仅作为个人提交。 在以前的论坛帖子中,Apple 过去似乎需要更长的时间(数月)
我是一名优秀的程序员,十分优秀!