🔥 ۴۰ درصد تخفیف ثبت‌نام دوره‌ها قبل از افزایش قیمت‌ها
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۲ سرواد هامون
Unidentifed function
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۲۳ دی ۱۴۰۰

سلام.داخل کلاس dashboard, profile, wallet هر تابعی که داخل method index استفاده میکنم نمیشناسه و خطای Unidentifed function میده.ممنون میشم راهنمایی بفرمایید

سلام خدمت شما. لطفا تصویر خطا رو اینجا آپلود کنید.

استاد روجا قنبری ۲۵ دی ۱۴۰۰، ۱۴:۰۹

ccc5-undefined function.jpg

سرواد هامون ۲۵ دی ۱۴۰۰، ۱۴:۱۹

مشکل این نوع توابع این هست که چون در فایل pluggable تعریف شدن، در کدهای پلاگین‌ها قابل استفاده نیستن مگر اینکه این کدها در هوک‌های اصلی مثل init فراخوانی بشن.

بهترین پاسخ
استاد روجا قنبری ۲۵ دی ۱۴۰۰، ۱۷:۲۴

استاد من داخل هوک init و همینطور هوک plugins_loaded در داخل construct__ استفاده کردم ، خطا برطرف شد اما کد‌ها اجرا نمیشه

سرواد هامون ۲۵ دی ۱۴۰۰، ۱۷:۵۸

داخل اون تابع یه var_dump بذارید ببینید چ نشون میده.

استاد روجا قنبری ۲۵ دی ۱۴۰۰، ۱۸:۱۰

اصلن نمیخونه.var_dump هم چیزی نمیاره برای من . کد‌ها رو مینویسم ملاحضه بفرمایید


include_once PANEL_PATH.'views/view.class.php';
class DashboardHandler
{
    public function __construct()
    {
     add_action('init',[$this,'index']);
      exit;
    }
    public function index(){
        echo "123";
        view::load( $current_user);

   فایل کلاس و new هم داخل router.php فراخوانی کردم

سرواد هامون ۲۵ دی ۱۴۰۰، ۱۸:۲۶

چرا add_action رو داخل سازنده کلاس نوشتین؟ منظورم این بود که در ابتدای پلاگین فایل‌های اصلی مثل Router باید داخل اون اجرا بشن.

استاد روجا قنبری ۲۵ دی ۱۴۰۰، ۱۸:۲۹

اینم فایل router.php


class router
{
public function __construct()
{
   $this->init(); 
}
public function init(){
    $request_uri = $_SERVER['REQUEST_URI'];
    if(strpos($request_uri,'dashboard')=== false){
        return;
    }
   /* */ $handler = $this->part_uri($request_uri);
/* */  $handler_format = $this->format_request_uri($handler);
       $checked_formate_request_file_path = $this->formate_request_file_path($handler_format);
//   var_dump($checked_formate_request_file_path);
if($checked_formate_request_file_path === true){
    $file_path = $this->file_path($handler_format);
    include_once $file_path; 
   new $handler_format;
}
    exit;
}
private function part_uri($request_uri){
    $uri_parts = explode('/',strtok($request_uri,'?'));
    return end($uri_parts);
}
private function format_request_uri($handler){
    $uri_file_formated = ucfirst($handler).'Handler';
    return  $uri_file_formated ;
}
private function formate_request_file_path($handler_format){
    $formatted_request_file_path =  $this->file_path($handler_format);
   return file_exists( $formatted_request_file_path) && is_readable( $formatted_request_file_path);
      
}
private function file_path($handler_format){
    $formatted_request_file_path = PANEL_PATH.'/userPanel/'.$handler_format.'.php';
    return $formatted_request_file_path;
}
}
new router;
سرواد هامون ۲۵ دی ۱۴۰۰، ۱۸:۳۰

کدها رو مثلا من ننوشتید، از چند جلسه قبل دوباره بررسی کنید

استاد روجا قنبری ۲۵ دی ۱۴۰۰، ۱۸:۳۶

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

 
class router
{
    public function __construct()
    {
        $this->handle_routes();
    }
    public function handle_routes(){
        
        $request_uri = $_SERVER['REQUEST_URI'];
        $this->dispatch_request($request_uri);
        
    }
    private function dispatch_request($request_uri){
        if(strpos($request_uri,'dashboard')=== false){
            return;
        }
       
       $handler = $this->part_uri($request_uri);
       $handler_format_name = $this-> format_handler_name($handler);
       if(!$this->is_handler_valid($handler_format_name)){
        echo "is not valid";
       }
       $handler_class = $this->get_handler_file($handler_format_name);
       include_once  $handler_class;
       new $handler_format_name;
       exit;
       
    }
    private function part_uri($uri){
        $uri_parts = explode('/',strtok($uri,'?'));
        return end($uri_parts);
        
    }
    private function is_handler_valid($handler_format_name){
        $handler_file_path = $this->get_handler_file($handler_format_name);
        return file_exists($handler_file_path) && is_readable($handler_file_path);
    }
    private function get_handler_file($handler_format_name){
        $handler_file_path = PANEL_PATH.'/handlers/'.$handler_format_name.'.php';
        return $handler_file_path;
    }
    private function format_handler_name($handler){
        $formmated_handler = ucfirst($handler).'Handler';
        return $formmated_handler;
    }
}

هوک init رو دقیقا در کدوم قسمت باید قرار بدم؟

سرواد هامون ۲۵ دی ۱۴۰۰، ۱۸:۴۶

شما دقیقا طبق کدها من پیش برید، بعدش اعلام کنید چه مشکلی پیش میاد.

استاد روجا قنبری ۲۵ دی ۱۴۰۰، ۱۸:۵۸

همون مشکلی که شما ابتدا اشاره کردید . به هوک init فراخوانی نکرده بودم که الان مشکل حل شد . ممنون از شما

سرواد هامون ۲۶ دی ۱۴۰۰، ۰۰:۲۴