💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۱۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱۲ علی صالحی
Unidentifed function
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۲۳ دی ۱۴۰۰

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

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

کیوان علی محمدی ۲۵ دی ۱۴۰۰، ۱۴:۰۹

ccc5-undefined function.jpg

علی صالحی ۲۵ دی ۱۴۰۰، ۱۴:۱۹

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

بهترین پاسخ
کیوان علی محمدی ۲۵ دی ۱۴۰۰، ۱۷:۲۴

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

علی صالحی ۲۵ دی ۱۴۰۰، ۱۷:۵۸

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

کیوان علی محمدی ۲۵ دی ۱۴۰۰، ۱۸:۱۰

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

<?php
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

<?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;
علی صالحی ۲۵ دی ۱۴۰۰، ۱۸:۳۰

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

کیوان علی محمدی ۲۵ دی ۱۴۰۰، ۱۸:۳۶

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

<?php 
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 فراخوانی نکرده بودم که الان مشکل حل شد . ممنون از شما

علی صالحی ۲۶ دی ۱۴۰۰، ۰۰:۲۴