🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ امیرحسین سلطانی
مشکل نمایش پیام not found
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۲۵ مرداد ۱۴۰۲

پیرو سوال قبلی هنوز مشکل حل نشده و پیامی که عکس اون ارسال شده نمایش داده میشه ممنون میشم بررسی کنید بفرمایید مشکل از کجا هست؟

پیام:

App\\Services\\CityService not found

من فکر می‌کنم مشکل از جایی هست که عکسش رو ارسال کردم ولی متوجه نمی‌شم باید چکار کنم!!!

امیرحسین سلطانی ۲۵ مرداد ۱۴۰۲، ۱۳:۴۱

سلام،

ما بین مسیر دهی در لاین 7 عبارت loader.php رو حذف کنید. احتمالاً دستتون خورده، کپی پیست شده چون در سورسی که در پست قبل فرستادید این عبارت نبوده و همچنین نباید هم باشد چون بودنش اشتباه است، علتش را هم باید بدانید، چنین مسیری اشتباه است، فرضاً:

../loader.php/example.php

دو فایل پشت سرهم در آدرس دهی نمی‌آید و همچین چیزی در سیستم فایل هم نداریم.

جدای ازینکه راهنمایی میشید جهت فیکس این موارد، اگر این مورد رو درک مناسبی ازش پیدا نکردید نیاز دارید بار دیگر مسائل php را مرور کنید.

چون این موارد بسیار کاربردی و بدیهی است. برای مثال اگر بخواهیم دیباگ کنیم و علت را متوجه بشیم، یکبار $class_file را echo میکنیم تا ببینیم مقدار داخل این متغیر چه چیزی است و چه مسیری وارد if میشود که پیدا جوابش false میشود و فایل را پیدا نمیکند.

در حال حاضر اگر مقدار $class_file را در خروجی چاپ کنیم، چیزی شبیه به این مسیر خواهید داشت:

echo $class_file;
// output: C:\\xampp\\htdocs\\iran\\loader.php/App\\Services\\CityService.php

موضوع یک اسلش \\ و اسلش / در آدرس دهی هم برمیگردد به سیستم عامل‌های ویندوز و لینوکس(یونیکسی) که ویندوز \\ است و یونیکس / می‌باشد.

این کد اگر روی هاست لینوکسی برود بخاطر چنین آدرس دهی اجرا نخواهد شد و به خطا میخورد.

بنابراین بهتر است کد به این شکل تغییر کند تا مطابق استاندارد‌های هر سیستم عامل(ویندوز، لینوکس، مک) مناسب باشد:

$class_path = str_replace('\\\\', DIRECTORY_SEPARATOR, $class);
$class_file = __DIR__ . DIRECTORY_SEPARATOR . $class_path . ".php";

دو خط بالا جایگزین لاین 7 خواهد شد.

پ.ن: البته ویندوز با / مشکلی ندارد. در واقع ویندوز هم با / کار میکند و هم با \\ اما استانداردش \\ است.

محسن موحد ۲۵ مرداد ۱۴۰۲، ۱۵:۲۳


Fatal error: Uncaught Error: Call to undefined function App\\Services\\getCities() in C:\\xampp\\htdocs\\7learn-wp.local\\iran\\App\\Services\\CityService.php:5 Stack trace: #0 C:\\xampp\\htdocs\\7learn-wp.local\\iran\\api\\v1\\cities\\index.php(7): App\\Services\\CityService->getCities(Object(stdClass)) #1 {main} thrown in C:\\xampp\\htdocs\\7learn-wp.local\\iran\\App\\Services\\CityService.php on line 5


با جایگذاری کد ارسالی به جای خط ۷ خطا بالا رو دریافت کردم

امیرحسین سلطانی ۲۶ مرداد ۱۴۰۲، ۱۱:۵۸

کدهارو برای فراخونی و تعریف تابع بررسی کنید.

فایل iran > loader.php :

include_once "App/iran.php";
spl_autoload_register(function ($class) {
    $class_path = str_replace('\\\\', DIRECTORY_SEPARATOR, $class);
    $class_file = __DIR__ . DIRECTORY_SEPARATOR . $class_path . ".php";
    if (!(file_exists($class_file) and is_readable($class_file)))
        die("$class not found");
        include_once $class_file;
});

فایل iran > api > v1 > cities > index.php :

include_once ".. / ../ ../loader.php";
use App\\Services\\CityService;
use App\\Utilities\\Response;
$cs = new CityService();
$result = $cs->getCities((object)[1,2,3]);
echo Response::respond($result,200);

نکته: فواصل بین مسیر include_once رو بردارید.

فایل iran > App > Services > CityService.php :

namespace App\\Services;
class CityService
{
    public function getCities($data)
    {
        return $data;
    }
}


محسن موحد ۲۶ مرداد ۱۴۰۲، ۱۹:۵۷

خیلی خیلی ممنون

مشکل از کد زیر بود

return getCities($data);

باید می‌شد:

return $data;

کد کامل اشتباه

class CityService
{
    public function getCities($data){
        return getCities($data);
    }
}
امیرحسین سلطانی ۲۶ مرداد ۱۴۰۲، ۲۰:۰۶

موفق باشید.

بهترین پاسخ
محسن موحد ۲۶ مرداد ۱۴۰۲، ۲۰:۱۴