اذهب إلى المحتوى

السؤال

نشر (معدل)

سؤال بخصوص طريقة livewire mount () method ؟

بحسب التوثيق الرسمي تستخدم الطريقة لالغاء دالة البناء وتمرير أو حقن  المعاملات الي العروض والغاء التلميح hinting .

If for whatever reason, this automatic behavior doesn't work well for you, you can intercept parameters using the mount() method:

In Livewire components, you use mount() instead of a class constructor __construct() like you may be used to. NB: mount() is only ever called when the component is first mounted and will not be called again even when the component is refreshed or rerendered.

Like a controller, you can inject dependencies by adding type-hinted parameters before passed-in ones.

الأن بداخل المشروع الذي أنفذة باستخدام نفس الطريقة لتمرير معامل id للمنتج والكوبون يحدث لدي الخطأ التالي :

Missing required parameter for [Route: admin.editcoupons] [URI: admin/coupon/edit/{coupon_id}] [Missing parameter: coupon_id]. (View: F:\xampp\htdocs\mshmk_shop\resources\views\livewire\admin\admin-coupons-component.blade.php)

<?php

namespace App\Http\Livewire\Admin;

use Livewire\Component;
use App\Models\Coupon;

class AdminEditCouponComponent extends Component
{
    // خواص الصنف كوبون
    public $code;
    public $type;
    public $value;
    public $cart_value;
    public $coupon_id;

    public function mount($coupon_id){

        $coupon = Coupon::find($coupon_id);
        $this->code = $coupon->code;
        $this->type = $coupon->type;
        $this->value = $coupon->value;
        $this->cart_value = $coupon->cart_value;
        $this->coupon_id = $coupon->coupon_id;

    }

    public function updated($fields){

        $this->validateOnly($fields,[
            
            'code' => 'required|unique:coupons',
            'type' => 'required',
            'value' => 'required|numeric',
            'cart_value' => 'required|numeric',

        ]);
    }

    public function updatecoupon(){
       $this->validate([
           //بعدما تتحقق من البيانات التي أدخلها المستخدم باستخدام التابع validate
           'code' => 'required|unique:coupons',
           'type' => 'required',
           'value' => 'required|numeric',
           'cart_value' => 'required|numeric',
       ]);
       //ثم قم بانشاء كائن جديد وتخزين قيمة البيانات المدخلة
       $coupon =  coupon::find($this->coupon_id);
       $coupon->code = $this->code;
       $coupon->type = $this->type;
       $coupon->value = $this->value;
       $coupon->cart_value = $this->cart_value;
       // قم بحفظ البيانات بأستخدام التابع save
       $coupon->save();
       //بعد ذلك قم بطباعه الرسالة التالية لجلسة المستخدم
       session()->flash('message','Coupon Has Been Updated Successfully!');
    }

    public function render()
    {
        // دالة أعادة العرض الي المستخدم 
        return view('livewire.admin.admin-edit-coupon-component')->layout('layouts.base');
    }
}
// المسار 
Route::get('admin/coupon/edit/{coupon_id}',AdminEditCouponComponent::class)->name('admin.editcoupons');
// ملف العرض 

<div>
    <div class="container" style="padding: 30px 0;">
        <div class="row">
            <div class="col-md-12">
                <div class="panel panel-default">
                    <div class="panel-heading">
                        <div class="row">
                            <div class="col-md-6">
                                Edit Coupon
                            </div>
                            <div class="col-md-6">
                                <a href="{{ route('admin.coupons')}}" class="btn btn-success pull-right">
                                    All Coupons
                                </a>
                            </div>
                        </div>
                    </div>
                    <div class="panel-body">
                        @if(Session::has('message'))
                            <div class="alert alert-success" role="alert">{{ Session::get('message')}}</div>
                        @endif
                        <form class="form-horizontal" wire:submit.prevent='updatecoupon'>
                         @csrf
                            <div class="form-group">
                                <label  class="col-md-4 control-label">
                                    Coupon Code
                                </label>
                                <div class="col-md-4">
                                    <input type="text" placeholder="Coupon Code" class="form-control input-md" wire:model='code' >
                                    @error('code') <p class="text-danger">{{$message}}</p> @enderror
                                </div>
                            </div>
                            <div class="form-group">
                                <label  class="col-md-4 control-label">
                                    Coupon Type
                                </label>
                                <div class="col-md-4">
                                    <select class="form-control"wire:model='type'>
                                        <option value="fixed">Select</option>
                                        <option value="fixed">Fixed</option>
                                        <option value="percent">Percent</option>
                                    </select>
                                    @error('type') <p class="text-danger">{{$message}}</p> @enderror
                                </div>
                            </div>
                            <div class="form-group">
                                <label  class="col-md-4 control-label">
                                    Coupon Value
                                </label>
                                <div class="col-md-4">
                                    <input type="text" placeholder="Coupon Value" class="form-control input-md" wire:model='value' >
                                    @error('value') <p class="text-danger">{{$message}}</p> @enderror
                                </div>
                            </div>
                            <div class="form-group">
                                <label  class="col-md-4 control-label">
                                    Cart Value
                                </label>
                                <div class="col-md-4">
                                    <input type="text" placeholder="Cart Value" class="form-control input-md" wire:model='cart_value' >
                                    @error('cart_value') <p class="text-danger">{{$message}}</p> @enderror
                                </div>
                            </div>
                            
                            <div class="form-group">
                                <label  class="col-md-4 control-label"></label>
                                <div class="col-md-4">
                                    <button type="submit" class="btn btn-primary">Update</button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

 

تم التعديل في بواسطة Hassan Hedr
تنسيق الخرج

Recommended Posts

  • 1
نشر

يمكنك تمرير خاصية ما إلى المكون عبر أولًا تعيينها كخاصية ضمن الصنف ثم الإشارة إليها من التابع mount كالتالي:

<?php

class AdminEditCouponComponent extends Component
{
  public $coupon_id;
  ...

  public function mount(){

    $coupon = Coupon::find($this->coupon_id);
    ...                    ^^^^^^^^^^^^^^^^
  }
}

ثم عند استخدام المكون ضمن ملفات العرض view يجب تمرير ذلك التابع للمكون كالتالي

<livewire:admin-edit-coupon-component :coupon_id="123">
                                      ^^^^^^^^^^^^^^^^
// أو من متغير
  
<livewire:admin-edit-coupon-component :coupon_id="$coupon_id">
                                                  ^^^^^^^^^^

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...