علیرضا جوادی
3 سال پیش توسط علیرضا جوادی مطرح شد
4 پاسخ

دلیل پیدا نکردن یک کلاس در لاراول

سلام دوستان من یه مینی پروژه با لاراول ورژن 8 نوشتم و اپلود کردم رو هاست تو لوکال کامپیوتر مشکلی نداشت همه چی خوب کار میکرد اما تو هاست ارور میده که یه کلاس رو نمیشناسه

Illuminate\Contracts\Container\BindingResolutionException
Target class [App\Http\Services\Image\ImageService] does not exist.

این ارورش هست من بارها چک کردم این کلاس use شده و هیچ مشکلی نداره تو لوکال کامل درست کار میکرد لطفا کمک کنید مرسی


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
0

@mefroen
سلام.
اول اینکه محمدحسنم :)

دوم اینکه چون لاراول برای autoload کلاس ها در نسخه های جدید از PSR-4 استفاده می‌کنه برای اینکه کلاس ها بصورت اتومات و به درستی لود بشن لازم هست که یکسری اصول رو حتما رعایت بکنید. و الا همین شرایطی پیش میاد که اسکرین شات ارسال کردید و همون طوری که در متنش هم اشاره کرده به دلیل عدم انطباق ساختار و نام گذاری فایل هاتون با PSR-4 کامپوزر اون ها رو skip می‌کنه و به همین خاطر باعث میشه که موقع استفاده نشناستشون.

اینکه اشکال کارتون کجاست تشخیصش بدون دیدن کل پروژه و پوشه بندی ها و نام گذاری هاتون دشواره. اما رایج ترین اشتباهات عبارتند از:

  • عدم تطابق نام استفاده شده در بخش namespace با اسامی پوشه ها.
  • عدم تطابق نام فایل با عنوان class
  • و اما رایج ترینش عدم تطابق حروف کوچک و بزرگ بکار رفته در اسم فایل ها و پوشه ها با مسیرهای آدرس دهی شده در namespace ها و عنوان کلاس ها)

(و اگر پروژتون روی لوکال به درستی کار میکنه و روی سرور به مشکل میخوره به احتمال ۹۹ درصد علتش همین مورد سوم هست) چون سیستم عامل لینوکس به شدت case sensitive هست بر خلاف ویندوز که خیلی از مواقع چشمش رو میبنده روی این قضیه.)


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش مطرح شد
1

اگر مطمئن هستید که فایل مورد نظر به درستی در مسیر نوشته شده آپلود شده قضیه بر میگرده به autoload کامپوزرتون.

اگر دسترسی به کامندلاین و ssh دارید یکبار دستور زیر رو اجرا کنید اوکی میشه:

composer dump-autoload

اگر هم دسترسی ندارید در نسخه لوکالتون اجرا کنید. بعد کل پوشه vendor تون رو zip کنید و به هاست منتقل کنید و با کل پوشه vendor هاست جایگزین کنید.


علیرضا جوادی
تخصص : برنامه نویس php
@mefroen 3 سال پیش آپدیت شد
0

سلام جناب اقایه محمد حسن یگانه ممنون بابت پاسختون
@mhyeganeh
همونطور که گفتید کامنت رو اجرا کردم تو لوکال اما با warning روبرو شدم
و دوباره کل پروژه رو رویه هاست بردم و همون خطایه قدیمی رو داد
توضیح تصویر رو وارد کنید


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش آپدیت شد
0

درود...
توی روت کلاس App\Http\Services\Image\ImageService فراخوانی شده؟


محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 3 سال پیش آپدیت شد
0

@mefroen
سلام.
اول اینکه محمدحسنم :)

دوم اینکه چون لاراول برای autoload کلاس ها در نسخه های جدید از PSR-4 استفاده می‌کنه برای اینکه کلاس ها بصورت اتومات و به درستی لود بشن لازم هست که یکسری اصول رو حتما رعایت بکنید. و الا همین شرایطی پیش میاد که اسکرین شات ارسال کردید و همون طوری که در متنش هم اشاره کرده به دلیل عدم انطباق ساختار و نام گذاری فایل هاتون با PSR-4 کامپوزر اون ها رو skip می‌کنه و به همین خاطر باعث میشه که موقع استفاده نشناستشون.

اینکه اشکال کارتون کجاست تشخیصش بدون دیدن کل پروژه و پوشه بندی ها و نام گذاری هاتون دشواره. اما رایج ترین اشتباهات عبارتند از:

  • عدم تطابق نام استفاده شده در بخش namespace با اسامی پوشه ها.
  • عدم تطابق نام فایل با عنوان class
  • و اما رایج ترینش عدم تطابق حروف کوچک و بزرگ بکار رفته در اسم فایل ها و پوشه ها با مسیرهای آدرس دهی شده در namespace ها و عنوان کلاس ها)

(و اگر پروژتون روی لوکال به درستی کار میکنه و روی سرور به مشکل میخوره به احتمال ۹۹ درصد علتش همین مورد سوم هست) چون سیستم عامل لینوکس به شدت case sensitive هست بر خلاف ویندوز که خیلی از مواقع چشمش رو میبنده روی این قضیه.)


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام