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

السؤال

نشر

أحاول تطوير حزمة تتضمن بعض مكونات Livewire وعروض Blade، وأقوم بتسجيل المكون في مزود الخدمة SeviceProvider، كمثال هناك ملف FooBar.php  في المسار /MyName/MyPackage/src/Components:

use Livewire\Component;
use MyName\MyPackage\Components\FooBar;

......

    public function boot() {

        Livewire::component('foo-bar', FooBar::class);

لدي أيضًا ملف عرض Blade، أي /MyName/MyPackage/resources/views/foo-bar.blade.php.

الآن يمكنني عرض عرض الكود مباشرًة من ملف التوجيه الخاص بي بهذه الطريقة:

Route::group(['middleware' => ['web', 'auth']], function(){

    Route::get('/foobar/{id}', function (string $id) {
          return view('my-package::foo-bar');
    });

});

يمكن أيضًا إدراجه في عروض Blade أخرى عبر <livewire:foo-bar />، ولكن إذا كنت قد اتبعت التعليمات من الوثائق الرسمية لتوجيه المكون FooBar بهذه الطريقة:

use Livewire\Component;
use MyName\MyPackage\Components\FooBar;

......

    Route::group(['middleware' => ['web', 'auth']], function(){

        Route::get('/foobar/{id}', FooBar::class);

    });

حصلت على رسالة  الخطأ التالية:

'MyName\MyPackage\Components\FooBar' was not found: Controller class 'MyName\MyPackage\Components\FooBar' for one of your routes was not found. Are you sure this controller exists and is imported correctly?

ما استفسر عنه هو:

  1. لماذا لا يعمل المكون في المسار، ولكن يعمل العرض؟
  2. تم تسجيل FooBar.php في ServiceProvider كمكون Livewire، لماذا تشير رسالة الخطأ إليه كمتحكم غير موجود؟
  3. كيف يمكن توجيه المكون Livewire بشكل صحيح في حزمة؟

معلومات البيئة لدي هي:

  • PHP الإصدار: 8.2.11
  • إصدار Laravel: 10.34.2
  • إصدار Livewire: v3.2.2

Recommended Posts

  • 0
نشر

اولا عليك القيام بالتالي :
إنشاء عرض Blade واستخدام المكون داخله: يجب أن يكون لديك ملف عرض Blade (على سبيل المثال foo-bar.blade.php) في المسار المناسب داخل الحزمة. في هذا العرض، يمكنك استخدام مكون Livewire بإضافة

<livewire:foo-bar />

ومن ثم إنشاء مسار (Route) يعرض هذا العرض بدلاً من محاولة توجيه المكون FooBar مباشرةً، يجب أن تنشئ مسارًا يعيد العرض الذي يحتوي على المكون. يمكنك فعل ذلك بالكود التالي:

Route::group(['middleware' => ['web', 'auth']], function(){
    Route::get('/foobar/{id}', function (string $id) {
        return view('my-package::foo-bar');
    });
});

هذا الكود يقوم بإنشاء مسار /foobar/{id} الذي يعرض العرض foo-bar.blade.php الذي يحتوي على مكون FooBar.
 

بعد تطبيق هذه التغييرات، تحقق من أن كل شيء يعمل كما هو متوقع. يجب أن تتمكن الآن من الوصول إلى العنوان /foobar/{id} في متصفحك ورؤية المكون FooBar يتم تحميله بشكل صحيح.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...