php Laravel组件控制器参数不传递到刀片文件

u2nhd7ah  于 5个月前  发布在  PHP
关注(0)|答案(1)|浏览(58)

我想传递一个公共变量到刀片文件,但我想在组件控制器下处理它。
部件使用情况

<x-membership.my-membership></x-membership.my-membership>

字符串
部件控制器

class MyMembership extends Component
{
    /**
     * Create a new component instance.
     */
    public function __construct(
        public $userMembership,
        public $showExpired = null,
    )
    {
        $this->userMembership = Auth::user()->user_membership;
        Carbon::setLocale(config('app.locale'));
        if($this->userMembership){
            $this->showExpired = Carbon::parse($this->userMembership->expired_at)->translatedFormat('j F Y');
        }
        else{
            $this->showExpired = null;
        }

        // When it is null then display regular membership
        if(!$this->userMembership){
            $this->userMembership = new Membership();
            $this->userMembership->membership = Membership::where('price',0)->first();
        }
    }

    /**
     * Get the view / contents that represent the component.
     */
    public function render(): View|Closure|string
    {
        return view('components.membership.my-membership');
    }
}


这是刀片文件

@isset($user_membership)
    <div id="myMembership">
        <div
            class=" text-gray-900 bg-white border border-gray-200 rounded-lg dark:bg-gray-700 dark:border-gray-600 dark:text-white">
            <div class="p-2 border-b flex justify-between capitalize">
                <span>{{ __('Membership') }}</span>
                <span>{{ $user_membership->membership->name }}</span>
            </div>
            <div class="p-2 {{ $show_expired ? 'border-b' : '' }} flex justify-between capitalize">
                <span>{{ __('Max Slot') }}</span>
                <span>{{ $user_membership->membership->max_slot }}</span>
            </div>
            @if ($show_expired)
                <div class="p-2 flex justify-between capitalize">
                    <span>{{ __('Expired At') }}</span>
                    <div>
                        <span>{{ $show_expired }}</span>
                    </div>
                </div>
            @endif
        </div>
    </div>
@endisset


$user_membership不传递到刀片文件的主要问题。它在localhost下工作,但在生产环境中不工作。
该组件由3个视图使用,这就是为什么我不能直接传递到用法,例如像这样

<x-membership.my-membership :membership="$user_membership"></x-membership.my-membership>


使用这一个是工作正常,但我需要在每个控制器上的状态,以检索当前的成员资格,而我只是想从组件控制器读取它。
编辑:我尝试从生产服务器中删除组件控制器进行测试,它仍然可以打开,没有任何问题。

Class "App\View\Components\Membership\MyMembership" not found


但为什么在生产中似乎laravel跳过控制器组件,它只是传递到刀片文件,这是类似的看法。我也做了

php artisan cache:clear
php artisan route:clear
php artisan optimize:clear

qnyhuwrf

qnyhuwrf1#

根据我的观点,我们不能在没有定义任何var的情况下使用Component。

<x-membership.my-membership></x-membership.my-membership>

字符串
然后我把它变成这样

<x-membership.my-membership :user-membership="Auth::user()->user_membership"></x-membership.my-membership>


我知道,声明

:user-membership="Auth::user()->user_membership"


不会做任何改变,因为结果将为null。然而,如果我们在那里声明一个参数,似乎__construct正在工作。

相关问题