آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

هدایت URL های بیهوده به ادرس جدید در پروژه نوت استاد؟؟؟؟؟

Motaba_Love_PHP  7 سال پیش  7 سال پیش
+2 0

سلام خسته نباشید

اکثرا می دونید routing پروژه ی استاد اینطوریه که وقتی همچنین url رو تایپ کردیم به طور مثال

 site.com/user/login

بره در فایل مشخصی کلاس user رو instance بگیره بعد متد login رو اجرا کنه!

خب اگه به طور مثال کسی همچنین ادرسی رو بزنه :

 site.com/asdasd

به طور کلی یه ادرس بیهوده و الکی 

به جای اینکه به صفحه 404 خودمون منتقل بشه این خطا ها رو بهش میده 

 Notice: Undefined offset: 2 in C:\xampp\htdocs\workspace\notes-v2\index.php on line 7

Warning: require_once(C:\xampp\htdocs\workspace\notes-v2/controller/asadsdasd.php): failed to open stream: No such file or directory in C:\xampp\htdocs\workspace\notes-v2\index.php on line 14

Fatal error: require_once(): Failed opening required 'C:\xampp\htdocs\workspace\notes-v2/controller/asadsdasd.php' (include_path='C:\xampp\php\PEAR') in C:\xampp\htdocs\workspace\notes-v2\index.php on line 14

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

به صفحه 404 منتقل بشه مثل باقی url های بیهوده !

اگه همچین روتینک نداشت به راحتی با یک خط کد htaccess میشد صفحات بیهوده رو منتقل کرد ولی خب الان هر چی بزنیم کلاس حسابش می کنه و وقتی پیداش نکنه خطا میده 

لطفا کمک کنین

 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
سجاد عباسی  7 سال پیش
+6 0

در index.php را مطابق زیر تغییر دهید.

 $controllerClassName = ucfirst($controller) . 'Controller';
$controllerInstance = new $controllerClassName();

if (method_exists($controllerInstance, $method)
  && is_callable(array($controllerInstance, $method))) {
  call_user_func_array(array($controllerInstance, $method), $params);
}else{
  header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
  echo "404";
}

در core.php هم مطابق زیر عمل کنید:

 function __autoload($className){
    if(strHas($className,"Model")){
        $filename=str_replace("Model", '',$className);
        $filename=strtolower($filename);
        require_once (getcwd()."/mvc/model/$filename.php");
        return;
    }
    if(strHas($className,"Controller")){
        $filename=str_replace("Controller", '',$className);
        $filename=strtolower($filename);
      if (!file_exists(getcwd()."/mvc/controller/$filename.php")) {
        header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
        echo "404";exit;
      } else{
        require_once (getcwd()."/mvc/controller/$filename.php");
    }
        return;
    }
}

با دوتا سرچ به این کد میرسیدید....

هم باید چک کنین که فایل وجود داره یا نه و متد وجود داره یا نه.

به جای نشون دادن 404 هم میتونید از یه view استفاده کنید.

0 0
میتونی توی فایل اصلی چک کنی ببینی همچین کاربری با ایمیل خودش ثبت نام کرده اگه نکرده یه صفحه با محتوای 404 براش نمایش داده بشه. (7 سال پیش)
+1 0
الان چ ربطی به عضویت کاربر داشت؟ :| (7 سال پیش)
0 0
آره شما درست میفرمایید . ذهن خسته همه چی ازش تراوش میشه . جوابای آقای عباسی ندیده تایید میکنم . موفق باشید دوست عزیز (7 سال پیش)
0 0
میتونید بجای اینکه تعریف همه متد ها یا کلاس ها توی 3 خط کد بنویسید اگر همچین کنترلر & متدی نبود صفحه Homepage رو براتون بارگذاری کنه (با دستور هدر). (7 سال پیش)
0 0
راه دیگه ایی وجود داره که نیاز به استفاده از file_exists نباشه ؟ (7 سال پیش)
0 0
فکر نمیکنم مشکلی باشه چون اگه وجود داشته باشه فایل رو میخونه و اجرا میکنه... (7 سال پیش)
0 0
جواب شما اینجاست : لینک ازش استفاده کردم درست کار میکنه (7 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .