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

السؤال

نشر

لقد قمت بإنشاء مشروع جديد على نسخة لارافيل 8، ولكن عن تعريف المتحكم يظهر لدي هذا الخطأ:

Target class [Api\RegisterController] does not exist.

وهذا هو الكود التجريبي الخاص بالمتحكم registerController

<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class RegisterController extends Controller
{
    public function register(Request $request)
    {
        dd('aa');
    }
}

ومع أنني قمت بتعريف المسار الخاص بالمتحكم ضمن ال api لدي:

Route::get('register', 'Api\RegisterController@register');

فما هي المشكلة؟

Recommended Posts

  • 0
نشر

إن السبب في ذلك هو بعض التغييرات التي طرأت على النسخة الثامنة في لارافيل.

ففي النسخ السابقة من لارافيل، مزود خدمة المسارات RouteServiceProvider موضوع ضمن $namespace بشكل افتراضي، أما في نسخة لارافيل 8 فقيمتها الافتراضية هي null لكي تتيح للمبرمج من تعريف الاسماء الخاصة به.

لذلك يجب عليك استخدام المسار الكامل ضمن التعريف عند عدم استخدام namespace محدد، كالتالي:

use App\Http\Controllers\UserController;

Route::get('/users', [UserController::class, 'index']);

// أو

Route::get('/users', 'App\Http\Controllers\UserController@index');

أما في حال كنت ترغب باعتماد الطريقة القديمة (الموجودة في الإصدارات السابقة من لارافيل) يجب عليك تعديل الملف App\Providers\RouteServiceProvider وإضافة namespace ضمن التابع boot كالتالي:

public function boot()
{
  

    Route::prefix('api')
        ->middleware('api')
        ->namespace('App\Http\Controllers') // <--------- نضيفها هنا
        ->group(base_path('routes/api.php'));

   
}

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

// protected $namespace = 'App\\Http\\Controllers';

وبذلك تعود لنفس الاستخدام كما هو في الإصدارات الأقدم من الإصدار رقم 8.

  • 0
نشر

يمكن التوجه إلى المسار التالي 

project_folder\app\Providers

 ومن ثم فتح ملف RouteServiceProvider.php وإزالة التعليق // عن متغير 

// protected $namespace = 'App\\Http\\Controllers';

فيصبح

protected $namespace = 'App\\Http\\Controllers';

فستعمل مع المسارات بشكل ممتاز

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...