私は少し困惑しています。ユーザー(実際には「顧客」)モデルに、ユーザーのサブスクリプション更新日を返す簡単なメソッドがあります。
public function subscriptionRenewalDate() : string
{
$subscription = $this->subscriptions()->active()->first()->asStripeSubscription();
return Carbon::createFromTimeStamp($subscription->current_period_end)->format('F jS, Y');
}
{{ auth()->user()->subscriptionRenewalDate() }}ブレード テンプレート ( )から認証済みユーザーに対してこのメソッドを呼び出すと、ローカルでは正常に動作しますが、リモート ステージング サーバーにアップロードするとすぐに次のエラーで失敗します。
名前が既に使用されているため、クラス App\Models\Customer を宣言できません
Customer モデルの次の行を指しています。
class Customer extends Authenticatable
{
奇妙なのは、リモート ステージング サーバーだけでなく、失敗した Travis CI でもあることです (PHPUnit テストを実行すると、これらの同じテストがローカルで正常に動作します)。
明らかに、何らかのキャッシングまたは構成の問題のようですが、このエラーの原因がわかりません。
テストは を使用するため、データベース関連ではありませんRefreshDatabase。ENV 変数 ( ) を削除するCASHIER_MODEL: App\Models\Customerと、予想される「モデル ユーザーが見つかりません」というエラーで失敗するため、ENV 変数を正しく取得しています。Laravel キャッシュ ( php artisan optimize:clear) とcomposer dump-autoload. とても紛らわしいです。
私が知っているのは、エラーの原因がasStripeSubscription(). メソッドからそれを削除すると、ブレード テンプレートは正常に読み込まれます (すべて正常に動作します)。
明確にするために、私は成功することができます (これはローカル、リモート、および Travis CI で行われます):
- ララベルに登録する
- Laravelにログイン
- 私のパスワードをリセットする
- 個人情報の更新
- Stripe サブスクリプションに登録するには、支払い情報を入力してください
- Stripe サブスクリプションの表示と変更
- Stripe.com ですべての顧客情報とサブスクリプション情報を確認する
- Stripe.com で自分の情報を編集し、自分のサーバーの Webhook を介して更新されたことを確認します
asStripeSubscription()問題があるのは、コードに が現れるときだけです。そして、それはリモートサーバー上にのみあります. ローカルでも問題なく動作します。
この呼び出しをさまざまなモデルに移動してみました。コントローラーから呼び出して、結果をビューに渡そうとしました。サーバーを再起動して、Travis CI のキャッシュをクリアすることも試しました。エラーは同じままです。
asStripeSubscription()このエラーが発生する原因は何ですか? ローカルでレプリケートできれば、デバッグできます。ローカルで完璧に動作することを頑固に主張しますが、リモートでは失敗します。
Laravel 8、PHP 7.3、Cashier 12.10 を使用しています。
Cannot declare class App\Models\Customer, because the name is already in use何がエラーにつながるのかを理解することはできません。
スタックトレース:
Laravel.log から:
[2021-03-22 10:29:23] production.ERROR: 名前が既に使用されているため、クラス App\Models\Customer を宣言できません {"userId":1127215,"exception":"[object] (Symfony\ Component\ErrorHandler\Error\FatalError (コード: 0): 名前が /var/app/current/app/Models/Customer.php:13 で既に使用されているため、クラス App\Models\Customer を宣言できません) [stacktrace]
