blog ب zendframework 2 الجزء الثالت


فهاد الجزء الثالت من blog ب zendframework 2 غادي نديرو ل connexion مع la base ومنبعد غادي نزيدو ل controllers لي غادي يكونوا فيهم les fonctions لي غادي نحتاجو منبعد غادي نزيدو لفورم لي غادي يمكنونا من إضافة les articles ول les catégories.

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

1- الملف global.php

فالمجلد config/autoload كاين الملف global.php كندير عليه تغييرات فكنزيد سمية la base :

                                <?php

return array(
    'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=zend-blog;host=localhost',
        'driver_options' => array(
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
        ),
    ),
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter'
                    => 'Zend\Db\Adapter\AdapterServiceFactory',
        ),
    ),
);

                            

2- الملف local.php

دائما فالمجلد config/autoload كاين الملف local.php كندير عليه تغييرات فكنزيد username و password ديال ل connexion ل la base de données :

                                <?php

return array(
    'db' => array(
        'username' => 'root',
        'password' => '',
    ),
);
                            

3- الملف PostForm.php

فالمجلد module/Post/src/Post/Form كنزيد ملف جديد كنسميه PostForm.php فيه غادي تكون لفورم لي كتمكن من إضافة article لقاعدة البيانات فهنا غادي نلاحضوا بلي les forms فzend مبدلين فهنا la classe PostForm كت hériter من la classe Form ديال zend منبعد كنزيدلها les champs ديالي وبالنسبة ل selectbox فغدي تكون واحد ل variable $categories_got لي كترجعنا les categories لي عندنا باش كيتزادو ف selectbox ولي غادي تكون فل PostController ولي غادي نزيدوه من بعد الكود ديال الملف هو:

                                <?php
 namespace Post\Form;

 use Zend\Form\Form;

 class PostForm extends Form
 {
     public function __construct($categories_got)
     {
         // we want to ignore the name passed
         parent::__construct('post');

         $this->add(array(
             'name' => 'id',
             'type' => 'Hidden',
         ));
         $this->add(array(
            'name' => 'category_id',
            'type' => 'select',
            'attributes' => array(
                'class' => 'form-control'
            ),
            'options' => array(
                'label' => 'Catégorie:',
                'options' => $categories_got
            ),
        ));
         $this->add(array(
             'name' => 'title',
             'type' => 'Text',
             'attributes' => array(
                'placeholder' => 'Entrer le titre',
                'class' => 'form-control'
            ),
             'options' => array(
                 'label' => 'Titre:',
             ),
         ));
         $this->add(array(
             'name' => 'body',
             'type' => 'Textarea',
             'attributes' => array(
                'cols' => '30',
                'rows' => '5',
                'placeholder' => 'Entrer la déscription',
                'class' => 'form-control'
            ),
             'options' => array(
                 'label' => 'Déscription:',
             ),
         ));
         $this->add(array(
             'name' => 'submit',
             'type' => 'Submit',
             'attributes' => array(
                 'value' => 'Valider',
                 'id' => 'submitbutton',
                 'class' => 'btn btn-success'
             ),
         ));
     }
 }
                            

4- الملف CategoryForm.php

دائما فالمجلد module/Post/src/Post/Form كنزيد ملف جديد كنسميه CategoryForm.php فيه غادي تكون لفورم لي كتمكن من إضافة categorie لقاعدة البيانات فكنزيد les champs بنفس الطريقة لي هضرنا عليها فالملف PostForm.php  الكود ديال الملف هو:

                                    <?php
 namespace Post\Form;

 use Zend\Form\Form;

 class CategoryForm extends Form
 {
     public function __construct()
     {
         // we want to ignore the name passed
         parent::__construct('category');

         $this->add(array(
             'name' => 'id',
             'type' => 'Hidden',
         ));
         $this->add(array(
             'name' => 'name',
             'type' => 'Text',
             'attributes' => array(
                 'placeholder' => 'Entrer le nom',
                 'class' => 'form-control'
             ),
             'options' => array(
                 'label' => 'Nom: ',
             ),
         ));
         $this->add(array(
             'name' => 'submit',
             'type' => 'Submit',
             'attributes' => array(
                 'value' => 'Valider',
                 'id' => 'submitbutton',
                 'class' => 'btn btn-success'
             ),
         ));
     }
 }
                                

5- الملف PostController.php

فالمجلد  module/Post/src/Post/Controller كنزيد ملف جديد سميه PostController.php ولي فيه les fonctions لي غادي نحتاجو فعندي indexAction لي كترجع les articles لي عندي فالجدول post وكترسلهم للملف index ولي غادي نزيدوه من بعد ثم كاين homeAction لي كترجعنا les articles و les categories وكترسلهم للملف home ولي غادي نزيدوه من بعد ثم كاين addAction لي كتمكن من إضافة article للجدول post من بعد مكتدير ل validation للفورم وهنا كنسترجعوا les categories وكنرسلوها للملف PostForm.php باش كيتزادو ف selectbox ديال الفورم منبعد كاين viewAction كترجعنا article باستعمال ل id ديالو بالإضافة لل catégorie ديالو ولي كنصيفطوهم للملف view ولي غادي يتزاد من بعد ثم كاين editAction لي كترجع article بل id ديالو ومنبعد كتديرلو modification منبعد مكتدير ل validation للفورم ثم كاين deleteAction لي كتمسح article باستعمال ل id ديالومنبعد عندي getPostTable لي كترجعنا la table post ونفس الشي بالنسبة ل la table categories الكود ديال الملف هو :

                                    <?php
namespace Post\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Post\Model\Post;          // <-- Add this import
use Post\Form\PostForm;  
use Post\Model\Category;          // <-- Add this import

class PostController extends AbstractActionController
{
    protected $postTable;
    protected $categoryTable;
    private $sm;

    public function indexAction()
    {
        return new ViewModel(array(
            'posts' => $this->getPostTable()->fetchAll(),
        ));
    }
    public function homeAction()
    {
        return new ViewModel(array(
            'posts' => $this->getPostTable()->fetchAll(),
            'categories' => $this->getCategoryTable()->fetchAll(),
        ));
    }
    public function addAction()
    {+
        $categories = $this->getCategoryTable()->fetchAll();
        foreach($categories as $categorie){
            $categories_got[$categorie->id] = $categorie->name;
        }

        $form = new PostForm($categories_got);
        $form->get('submit')->setValue('Valider');

        $request = $this->getRequest();
        if ($request->isPost()) {
            $post = new Post();
            $form->setInputFilter($post->getInputFilter());
            $form->setData($request->getPost());

            if ($form->isValid()) {
                $post->exchangeArray($form->getData());
                $this->getPostTable()->savePost($post);
                return $this->redirect()->toRoute('post');
            }
        }
        return array('form' => $form);
    }
    public function viewAction()
    {
        //get the id from the url
         $id = (int) $this->params()->fromRoute('id', 0);
         if (!$id) {
             return $this->redirect()->toRoute('post');
         }
         return new ViewModel(array(
            'post' => $post = $this->getPostTable()->getPost($id),
            'categorie' => $this->getCategoryTable()->getCategory($post->category_id)
         ));
    }
    public function editAction()
    {
        $categories = $this->getCategoryTable()->fetchAll();
        foreach($categories as $categorie){
            $categories_got[$categorie->id] = $categorie->name;
        }
        //get the id from the url
        $id = (int) $this->params()->fromRoute('id', 0);
        if (!$id) {
            return $this->redirect()->toRoute('post', array(
                'action' => 'index'
            ));
        }
        // Get the Album with the specified id.  An exception is thrown
        // if it cannot be found, in which case go to the index page.
        try {
            $post = $this->getPostTable()->getPost($id);
        }
        catch (\Exception $ex) {
            return $this->redirect()->toRoute('post', array(
                'action' => 'index'
            ));
        }

        $form  = new PostForm($categories_got);
        $form->bind($post);
        $form->get('submit')->setAttribute('value', 'Modifier');

        $request = $this->getRequest();
        if ($request->isPost()) {
            $form->setInputFilter($post->getInputFilter());
            $form->setData($request->getPost());

            if ($form->isValid()) {
                $this->getPostTable()->savePost($post);

                // Redirect to list of albums
                return $this->redirect()->toRoute('post');
            }
        }
        return array(
            'id' => $id,
            'form' => $form,
        );
    }

    public function deleteAction()
    {
        //get the id from the url

         $id = (int) $this->params()->fromRoute('id', 0);
         if (!$id) {
             return $this->redirect()->toRoute('post');
         }
         $request = $this->getRequest();
         if ($request->isPost()) {
             //check if the user say yes or no
             $del = $request->getPost('del', 'No');
             if ($del == 'Yes') {
                 $id = (int) $request->getPost('id');
                 $this->getPostTable()->deletePost($id);
             }
             // Redirect to list of articles
             return $this->redirect()->toRoute('post');
         }
         return array(
             'id'    => $id,
             'post' => $this->getPostTable()->getPost($id)
         );
    }
    public function getPostTable()
    {
        if (!$this->postTable) {
            $this->sm = $this->getServiceLocator();
            $this->postTable = $this->sm->get('Post\Model\PostTable');
        }
        return $this->postTable;
    }
    public function getCategoryTable()
    {
        if (!$this->categoryTable) {
            $this->sm = $this->getServiceLocator();
            $this->categoryTable = $this->sm->get('Post\Model\CategoryTable');
        }
        return $this->categoryTable;
    }
}
                                


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

بحث في الموقع


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