blog ب zendframework 2 الجزء الثاني


فهاد الجزء الثاني من blog ب zendframework 2 غادي نكملو ال configuration ديال ل projet ديالنا من بعد غادي نشوفو كيفاش نزيدو les fichiers لي كيمكنونا من التعامل مع les tables ديالنا بالإضافة لكيفاش نتكونيكطاو مع la base de données ديالنا.

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

1- application.config.php

فباش ل projet ديالنا يعرف بلي عندنا module جديد كنمشي للمجلد config ديال ل projet
وفالملف application.config.php  كنزيد ل module ديالي لي هو Post :

                                 // This should be an array of module namespaces used in the application.
    'modules' => array(
        'Application',
        'Post'
    ),
                            

2- الملف Post.php

فالمجلد  module/Post/src/Post/Model كنزيد ملف جديد سميه Post.php ولي فيه les variables ليهما les champs ديال la table post ولي كيمكنو من استرجاع المعلومات ديال كل article وكاين ل fonction exchangeArray لي غادي تمكنا من استعمال TableGateway  باش نديرو les opérations ديالنا على la table post وهادشي غادي نشوفوه من بعد ثم كاين
getArrayCopy لي كنحتاجها فاش كندير modification من بعد  getInputFilter لي فقط كنحدد بها ل validation ديال les champs شكون لي مخصوش يكون خاوي وشحال من حرف خص يدخل المستخدم فكل حقل الكود ديال الملف هو :

                                <?php
 namespace Post\Model;

 // Add these import statements
 use Zend\InputFilter\InputFilter;
 use Zend\InputFilter\InputFilterAwareInterface;
 use Zend\InputFilter\InputFilterInterface;

 class Post
 {
     public $id;
     public $category_id;
     public $title;
     public $body;
     public $created;
     protected $inputFilter;  

     public function exchangeArray($data)
     {
         $this->id     = (!empty($data['id'])) ? $data['id'] : null;
         $this->category_id = (!empty($data['category_id'])) ? $data['category_id'] : null;
         $this->title  = (!empty($data['title'])) ? $data['title'] : null;
         $this->body = (!empty($data['body'])) ? $data['body'] : null;
         $this->created = (!empty($data['created'])) ? $data['created'] : null;
     }
      // Add the following method:
      public function getArrayCopy()
      {
          return get_object_vars($this);
      }
     // Add content to these methods:
     public function setInputFilter(InputFilterInterface $inputFilter)
     {
         throw new \Exception("Not used");
     }

     public function getInputFilter()
     {
         if (!$this->inputFilter) {
             $inputFilter = new InputFilter();

             $inputFilter->add(array(
                 'name'     => 'id',
                 'required' => true,
                 'filters'  => array(
                     array('name' => 'Int'),
                 ),
             ));
             $inputFilter->add(array(
                'name'     => 'category_id',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
             ));
             $inputFilter->add(array(
                 'name'     => 'body',
                 'required' => true,
                 'filters'  => array(
                     array('name' => 'StripTags'),
                     array('name' => 'StringTrim'),
                 ),
                 'validators' => array(
                     array(
                         'name'    => 'StringLength',
                         'options' => array(
                             'encoding' => 'UTF-8',
                             'min'      => 1,
                             'max'      => 1000,
                         ),
                     ),
                 ),
             ));
             $inputFilter->add(array(
                 'name'     => 'title',
                 'required' => true,
                 'filters'  => array(
                     array('name' => 'StripTags'),
                     array('name' => 'StringTrim'),
                 ),
                 'validators' => array(
                     array(
                         'name'    => 'StringLength',
                         'options' => array(
                             'encoding' => 'UTF-8',
                             'min'      => 1,
                             'max'      => 100,
                         ),
                     ),
                 ),
             ));
             $this->inputFilter = $inputFilter;
         }
         return $this->inputFilter;
     }
 }
                            

3- الملف Category.php

دائما فالمجلد  module/Post/src/Post/Model كنزيد ملف جديد سميه Category.php ولي فيه les variables ليهما les champs ديال la table category ولي كيمكنو من استرجاع المعلومات ديال كل categorie والبقية راه نفس الشي لي شفنا فالملف Post.php الكود ديال الملف هو :

                                <?php

 namespace Post\Model;
 // Add these import statements
 use Zend\InputFilter\InputFilter;
 use Zend\InputFilter\InputFilterAwareInterface;
 use Zend\InputFilter\InputFilterInterface;

 class Category
 {
     public $id;
     public $name;
     protected $inputFilter;  

     public function exchangeArray($data)
     {
         $this->id     = (!empty($data['id'])) ? $data['id'] : null;
         $this->name = (!empty($data['name'])) ? $data['name'] : null;
     }
     // Add the following method:
     public function getArrayCopy()
     {
         return get_object_vars($this);
     }
     // Add content to these methods:
     public function setInputFilter(InputFilterInterface $inputFilter)
     {
         throw new \Exception("Not used");
     }

     public function getInputFilter()
     {
         if (!$this->inputFilter) {
             $inputFilter = new InputFilter();

             $inputFilter->add(array(
                 'name'     => 'id',
                 'required' => true,
                 'filters'  => array(
                     array('name' => 'Int'),
                 ),
             ));
             $inputFilter->add(array(
                'name'     => 'name',
                'required' => true,
                'filters'  => array(
                    array('name' => 'StripTags'),
                    array('name' => 'StringTrim'),
                ),
             ));
             $this->inputFilter = $inputFilter;
         }
         return $this->inputFilter;
     }
 }
                            

4- الملف PostForm.php

دائما فالمجلد  module/Post/src/Post/Model كنزيد ملف جديد سميه PostForm.php ولي فيه les fonctions لي غادي نحتاجو فعندي fetchAll لي كترجع les articles لي عندي فالجدول post منبعد كاين getCategoryArticles لي كترجعنا les articles ديال كل categorie منبعد كاين getPost لي كترجع article اختارو المستخدم  باستعمال ل id ديالومنبعد كاين savePost لي كتمكن من إضافة article للجدول post من بعد مكتدير ل validation للفورم وكتحقق يلا كان ل id كتدير ل modification مكنش كتدير ل ajout منبعد deletePost لي كتمسح article باستعمال ل id ديالو فهنا TableGateway هي اتوماتيكيا كتساوي la table post ديالنا حيت zend كتخدم ب name convention لي كتمكن من من ربط اسم ل Model ب la table الكود ديال الملف هو :

                                    <?php
namespace Post\Model;

 use Zend\Db\TableGateway\TableGateway;

 class PostTable
 {
     protected $tableGateway;

     public function __construct(TableGateway $tableGateway)
     {
         $this->tableGateway = $tableGateway;
     }

     public function fetchAll()
     {
         $resultSet = $this->tableGateway->select();
         return $resultSet;
     }
     public function  getCategoryArticles($id){
        $resultSet = $this->tableGateway->select(array('category_id' => $id));
        return $resultSet;
     }
     public function getPost($id)
     {
         $id  = (int) $id;
         $rowset = $this->tableGateway->select(array('id' => $id));
         $row = $rowset->current();
         if (!$row) {
             throw new \Exception("Article introuvable : $id");
         }
         return $row;
     }

     public function savePost(Post $post)
     {
         $data = array(
             'category_id' => $post->category_id,
             'title'  => $post->title,
             'body'  => $post->body,
         );

         $id = (int) $post->id;
         if ($id == 0) {
             $this->tableGateway->insert($data);
         } else {
             if ($this->getPost($id)) {
                 $this->tableGateway->update($data, array('id' => $id));
             } else {
                 throw new \Exception('Article introuvable');
             }
         }
     }

     public function deletePost($id)
     {
         $this->tableGateway->delete(array('id' => (int) $id));
     }
 }
                                

5- الملف CategoryForm.php

دائما فالمجلد  module/Post/src/Post/Model كنزيد ملف جديد سميه CategoryForm.php ولي فيه les fonctions لي غادي نحتاجو فعندي نفس les fonctions لي شفنا ف PostForm.php ولي كيزيدو categorie كي modifier categorie وrécupérer categorie وكيمسح categorie      الكود ديال الملف هو :

                                    <?php
namespace Post\Model;

 use Zend\Db\TableGateway\TableGateway;

 class CategoryTable
 {
     protected $tableGateway;

     public function __construct(TableGateway $tableGateway)
     {
         $this->tableGateway = $tableGateway;
     }

     public function fetchAll()
     {
         $resultSet = $this->tableGateway->select();
         return $resultSet;
     }

     public function getCategory($id)
     {
         $id  = (int) $id;
         $rowset = $this->tableGateway->select(array('id' => $id));
         $row = $rowset->current();
         if (!$row) {
             throw new \Exception("Article introuvable : $id");
         }
         return $row;
     }
     public function saveCategory(Category $category)
     {
         $data = array(
             'name' => $category->name
         );

         $id = (int) $category->id;
         if ($id == 0) {
             $this->tableGateway->insert($data);
         } else {
             if ($this->getcategory($id)) {
                 $this->tableGateway->update($data, array('id' => $id));
             } else {
                 throw new \Exception('Article introuvable');
             }
         }
     }

     public function deleteCategory($id)
     {
         $this->tableGateway->delete(array('id' => (int) $id));
     }
 }
                                


بحث في الموقع


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