كيفاش تصاوب php framework خاصة بك وتصاوب بها blog الجزء الأول


فهاد ال projet الجديد غادي نشوفو كيفاش نقادو php framework خاصة بنا غادي نخدمو ب php mvc منبعد مغادي نقادو ل framework غادي نشوفوا كيفاش نصاوبو بها blog كيمكن المستخدم باش يزيد يعدل أو يحدف des posts ديالو فهنا خص تكون عندك les bases ديال la programmation orienté objet فيلا مكنتيش ضابطها حاول ترجع للدروس السابقة. 

نظرة سريعة بالفيديو

1- الملف Core.php

أول حاجة  غادي تزيد dossier جديد ف localhost سميه لي بغيتي انا سميتو php_mvc منبعد فيه زيد dossier جديد سميه  app فيه زيد dossier جديد libraries منبعد فيه زيد ملف جديد سميه Core.php فيه غادي تكون عندي les variables لي فيهم ل contrôleur par défaut ولي  عطيناه Pages ولي غادي نزيدوه من بعد ثم ل méthode par défaut لي عطيناها ل index ول params لي خليناهم خاويين منبعد كاين ل fonction getUrl لي كتمكن من استرجاع ل url منبعد مكتفرقو ب / 
منبعد عندي ل constructeur لي فيه كنسترجع ل url منبعد كنتحقق واش كاين شي controller لي عندو نفس اسم ل url ولي يلا لقيتو كنديرو  contrôleur par défaut ونفس الشي بالنسبة لل méthode وبالنسية ل les paramètres كنخدم بل fonction call_user_func_array لي كتاخد ل controller ول méthode وكتستخرج منهم les params فهنا structure ديال ل url غادي تكون على هاد الشكل localhost/php_mvc/posts/edit/1 هنا ل controller هو posts ل méthode هي edit  ل param هو 1 الكود ديال الملف هو :

                                <?php
/*
* App Core Class
* Creates URL & loads core controller 
* URL FORMAT - /controller/method/params
*/

class Core{
    protected $defaultController = 'Pages';
    protected $defaultMethod = 'index';
    protected $params = [];

    public function __construct(){
        $url = $this->getUrl();
        //check if controller exists
        if(file_exists('../app/controllers/'. ucwords($url[0]) .'.php')){
            //set default controller to current one
            $this->defaultController = ucwords($url[0]);
            //inset index 0
            unset($url[0]);
        }
        //require controller
        require ('../app/controllers/' . $this->defaultController . '.php');
        //instantiate controller
        $this->defaultController = new $this->defaultController;

        //check if method exists in controller
        if(isset($url[1])){
            if(method_exists($this->defaultController,$url[1])){
                $this->defaultMethod = $url[1]; 
                //inset index 1
                unset($url[1]);
            }
        }
        //get params
        $this->params = $url ? array_values($url) : [];
        //get function args
        call_user_func_array([$this->defaultController,$this->defaultMethod],$this->params);
    }
    public function getUrl(){
        if(isset($_GET['url'])){
            //rtrim remove characters from the right side of a string
            $url = rtrim($_GET['url'],'/');
            $url = filter_var($url,FILTER_SANITIZE_URL);
            $url = explode('/',$url);
            return $url;
        }
    }
}
                            

2- الملف Controller.php

دائما ف libraries  فيه زيد ملف جديد سميه Controller.php  غادي يكون هو ل contrôleur de base ديالنا فيه ل fonction model لي كتبحث على model ف dossier models لي غادي نزيدوه من بعد يلا لقاتو كت instancier l'objet منو وكاين view لي كتاخد la page  لي غادي تعرض و data array لي غادي يكونوا فيها معلومات إضافية غادي تعرض ف la page وكتقلب عليها ف dossier views ولي يلا لقاتها كتديرلها ل include ملقاتش كتعرض رسالة خطأ الكود ديال الملف هو :

                                <?php
/*
* App Main Controller
* Loads models & views
*/

class Controller {
    //load model
    public function model($model){
        //require model 
        require ('../app/models/'.$model.'.php');
        //instantiate model
        return new $model();
    }   
    //load view
    public function view($view,$data = []){
        //check if view exists 
        if(file_exists('../app/views/'.$view.'.php')){
            require_once('../app/views/'.$view.'.php');
        }else{
            die('la page demandée n\'existe pas');
        }
    }
}
                            

3- الملف config.php

دائما ف app فيه زيد dossier جديد سميه config فيه زيد ملف جديد سميه config.php عندي فيه أولا des constantes لي غادي نخدم بهم باش نتصل ب la base de données منبعد عندي des constantes لي فيهم محدد  root ديال ل projet ول url de base ولإسم ديال لموقع ولي غادي نخدموا بهم من بعد الكود ديال الملف هو :

                                <?php
//databse constants
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PASSWORD','');
define('DB_NAME','blog');
//APPROOT
define('APPROOT',dirname(dirname(__FILE__)));
//URL ROOT
define('BASEURL','http://localhost/php_mvc');
//SITE NAME
define('SITENAME','DCFramework');
                            

4- الملف Database.php

منبعد كنرجع ل dossier libraries فيه كنزيد ملف جديد سميه Database.php فيه غادي يكون لكود لي كيمكن باش نتصل بقاعدة البيانات ولي غادي نزيدوها من بعد فأولا كنسترجع les constatntes لي زدت فالملف السابق منبعد كنخدم ب pdo باش كندير la connexion منبعد عندي la fonction query لي كت préparer la requête منبعد كاين bind لي كتاخد كل param وكتزيدلو  une valeur وهادشي غادي نشوفوه ملي ندوزو ل blog منبعد كاين execute لي كتنفد  la requête منبعد كاين results لي كترجع le résultat ديال ل exécution d'une requête منبعد كاين getSingle لي كترجع ligne وحدة منبعد كاين countResults لي كترجع le nombre de lignes الكود ديال الملف هو :

                                    <?php
/*
* connect to database
* use pdo 
*/

class Database{
    private $host = DB_HOST;
    private $user = DB_USER;
    private $password = DB_PASSWORD;
    private $dbname = DB_NAME;

    private $dbh;
    private $stmt;
    private $error;

    public function __construct(){
        $dsn = 'mysql:host='.$this->host.';dbname='.$this->dbname;
        $options = array(
            PDO::ATTR_PERSISTENT => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        );
        try{
            $this->dbh = new PDO($dsn,$this->user,$this->password,$options);
            //echo 'connected';
        }catch(PDOException $e){
            $this->error = $e->getMessage();
            echo $this->error;
        }
    }
    //prepare query
    public function query($sql){
        $this->stmt = $this->dbh->prepare($sql);
    }
    //bind values 
    public function bind($param,$value,$type = null){
        if(is_null($type)){
            switch(true){
                case is_int($value) :
                   $type = PDO::PARAM_INT;
                   break;
                case is_bool($value) :
                   $type = PDO::PARAM_BOOL;
                   break;
                case is_null($value) :
                   $type = PDO::PARAM_NULL;
                   break;
                default:
                   $type = PDO::PARAM_STR;
                   break;
            }
        }
        $this->stmt->bindValue($param,$value,$type);
    }
    //execute query
    public function execute(){
        return $this->stmt->execute();
    }
    //get results as array
    public function results(){
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_OBJ);
    }
    //get one row 
    public function getSingle(){
        $this->execute();
        return $this->stmt->fetch(PDO::FETCH_OBJ);
    }
    //get row count
    public function countResults(){
        return $this->stmt->rowCount();
    }
}
                                

5- الملف bootstrap.php

ف dossier app كنزيد ملف جديد كنسميه bootstrap.php فيه غادي يكون لكود لي كيمكن باش ندير ل include ل les classes لي زدنا  ف dossier libraries أوتوماتيكيا باستعمال ل fonction spl_autoload_register وفيه ايضا ل include ل config.php وملفات اخرى غادي نزيدوها فالجزء الثاني الكود ديال الملف هو :

                                    <?php
//load config file
require_once ('config/config.php');
//load helpers 
require_once ('helpers/alert_helper.php');
require_once ('helpers/redirect_helper.php');
/*load libraries
require_once ('/libraries/core.php');
require_once ('/libraries/controller.php');
require_once ('/libraries/database.php');
*/
//auto load our classes
spl_autoload_register(function($className){
    require_once ('libraries/'.$className.'.php');
});
                                


إشترك في قناتنا على اليوتيوب

بحث في الموقع


إشترك للتوصل بالجديد