• 2 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کار نکردن autoload
#1
سلام خدمت دوستان و اساتید محترم ...

من به یه مشکلب بر خوردم ... یه router نوشتم و جایی که میخوام autoload اتفاق بیفته انجام نمیشه .. ببینید :

کد پی‌اچ‌پی:
            $path ROOTPATH.'app'.SEPARATOR.'controllers'.SEPARATOR.strtolower(self::$_Routers[$url[0]]['controller'].'.php');
                    
$pathSpacename 'App'.SEPARATOR.'Controllers'.SEPARATOR.self::$_Routers[$url[0]]['controller'];
                    if(
autoload($path) === true)
                    {
                        if(
method_exists($pathSpacenameself::$_Routers[$url[0]]['action']))
                        {
                            
$obj = new $pathSpacename;
                            
$action self::$_Routers[$url[0]]['action'];
                            
$obj->$action();
                        }
                        else
                        {
                            echo 
"Method Does not Exist";
                        }
                    }
                    else
                    {
                        echo 
"File Does not Exist";
                    } 
تو این جا من با تابع autoload میگردم ببینم فایل وجود داره یا نه اگر داشت spl_autoload_register() رو اجراش میکنم ... اما کار نمیکنه... ولی وقتی twig رو نصب میکنم و autoload اش رو فعال میکنم رو پروژم مشکل حل میشه ... میشه لطفا یه توضیحی در مورد این مبحث بدین ؟ چون من و خیلی گیج کرده رو پروژه نمیتونم کار کنم اما با همین روش تو یه پروژه دیگه راحت با کلاس هام و namespace هام کار میکنم ... نمیدونم چرا ...
لطفا یه توضیحی بدین اگر من بخوام method_exists رو چک بکنم تو کد بالا بدون include کردن صفحه چجوری از spl_autoload_register() استفاده کنم ... ممنون
  پاسخ
تشکر شده توسط :
#2
مشکلم حل شد ...ممنون

خواستم یه توضیحی بدم شاید دوستانی که بعدا این پست رو میخونن بدردشون بخوره :

شما فکر کنید جایی از پروژه میخواین class ی رو new بکنید مثل زیر ...
کد پی‌اچ‌پی:
$obj = new $pathSpacename

هر زمان که تو پروژه قرار شی New بشه این تابع به کار میفته ... من یه صفحه دارم به اسم function که تو پروژم include هست داخلش یه تابع دارم که کار autoload کردن رو برای من انجام میده به شکل زیر :

کد پی‌اچ‌پی:
function load($class)
    {
        
$class ROOTPATH.strtolower($class).'.php';
        require_once 
$class;
    }
    
spl_autoload_register('load'); 
و شما اینجوری با یه بار require کردن صفحه میتونید از namespace هاتون استفاده کنید و دیگه نخوای هر بار class مورد نظرتون رو include کنید ...
  پاسخ
تشکر شده توسط : Alaa


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان