blog ب zendframework 2 الجزء الأول


فهاد المشروع الأول من سلسلة zend framework غادي نشوفو كيفاش نقادو blog ف zend هي واحد ل php framework لي معقدة شيءا ما ف structure ديالها وباش نقادو ل blog أنا اعتمدت على la documentation ديالهم لي يمكنلك تشوفها من هنا فباش نبقاو ماشين ف la même voie من الأفضل تبع la documentation فالblog ديالنا كيمكن مستخدم باش يزيد des articles يعدلها ويحدفها بالإضافة لمزايا أخرى.

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

1- تحميل المشروع

أول شيء غادي تديرو هو تثبيت composer لي غادي يمكنك من تثبيت zend يمكنلك  تحملو من الموقع الرسمي من هنا من بعد غادي تفتح cmd غادي نكتب الأمر:

cd c:\xampp\htdocs يلا كنتي خدام ب xampp
كنتي خدام ب wamp غادي نكتب الأمر:
cd c:\wamp\www
 من بعد غادي تديرالأمر
composer create-project -sdev --repository-url="https://packages.zendframework.com" zendframework/skeleton-application zend-blog./ 2.5
الإسم ديال المشروع هو zend-blog  من بعد ما يتزاد المجلد ف wamp/www أو xampp/htdocs غادي نزيدو قاعدة بيانات جديدة ف phpmyadmin سميها zend-blog فيها deux tables واحدة post وأخرى  category الكود باش تزيدهم هو :

                                --
-- Base de données :  `zend-blog`
--

-- --------------------------------------------------------

--
-- Structure de la table `category`
--

CREATE TABLE `category` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Déchargement des données de la table `category`
--

INSERT INTO `category` (`id`, `name`, `created`) VALUES
(1, 'Téchnologie', '2017-09-24 13:34:41'),
(2, 'Sport', '2017-09-24 13:34:41');

-- --------------------------------------------------------

--
-- Structure de la table `post`
--

CREATE TABLE `post` (
  `id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `body` text NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `category_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Déchargement des données de la table `post`
--

INSERT INTO `post` (`id`, `title`, `body`, `created`, `category_id`) VALUES
(1, 'Lorem ipsum dolor sit amet', 'consectetur adipiscing elit. Vivamus at velit lobortis, molestie erat eu, euismod felis. Aliquam finibus elit massa, ut vehicula lacus maximus vel. Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur sit amet sem in dui congue commodo. Fusce maximus, tortor vel condimentum accumsan, massa nibh bibendum leo, vel accumsan dolor diam eu massa. Donec sit amet fringilla eros. Vivamus purus libero, tincidunt non magna eu, sodales tincidunt ligula. Vivamus sed dolor ut justo pellentesque imperdiet in sed quam. Nunc fringilla viverra lacus. Sed nunc erat, porta mollis ante ac, tempor maximus justo. Duis at mattis ante, rhoncus lacinia nisi. Donec consequat sagittis tempor.', '2017-09-24 13:35:57', 1),
(2, 'Suspendisse potenti. Suspendisse sollicitudin ipsum', 'Suspendisse potenti. Suspendisse sollicitudin ipsum eget turpis vulputate consequat. Cras sed magna pulvinar, accumsan metus in, condimentum libero. Phasellus bibendum dictum pretium. Integer ut lacinia nisi. Etiam sit amet enim nec nunc efficitur dapibus et vitae massa. Ut quam arcu, molestie sit amet enim luctus, cursus condimentum velit. Integer molestie, augue ac eleifend ullamcorper, neque augue fringilla mauris, et tincidunt dui lorem id lorem. Ut libero tellus, tincidunt ac tortor id, rhoncus vehicula nulla. Ut eget massa in sapien bibendum faucibus ac sit amet ante.', '2017-09-24 13:36:04', 2);

--
-- Index pour les tables déchargées
--

--
-- Index pour la table `category`
--
ALTER TABLE `category`
  ADD PRIMARY KEY (`id`);

--
-- Index pour la table `post`
--
ALTER TABLE `post`
  ADD PRIMARY KEY (`id`),
  ADD KEY `id` (`category_id`);

--
-- AUTO_INCREMENT pour les tables déchargées
--

--
-- AUTO_INCREMENT pour la table `category`
--
ALTER TABLE `category`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
--
-- AUTO_INCREMENT pour la table `post`
--
ALTER TABLE `post`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;COMMIT;

                            

2- إضافة المجلدات

فالمجلد module غادي نزيدو المجلدات لي غادي نخدمو بهم فهنا
structure غادي تكون على هاد الشكل:
zend-blog/ /module /Post /config /src /Post /Controller /Form /Model /view /post /category
/post
فالمجلد الرئيسي هو Post بينما المجلدات لخرين تابعينلو منبعد فالمجلد الرئيسي لي هو Post كنزيد ملف جديد كنسميه Module.php فيه la configuration ديالنا عندنا getAutoloaderConfig لي فقط كتاخد chemin ل src ديالنا وعندنا getConfig لي كتدير include للملف module.config ولي غادي نزيدوه من بعد ف getServiceConfig كنعطي chemin للملفات لي غادي يكون عندهم علاقة ب la base de données ولي غادي نزيدوهم من بعد الكود ديال الملف Module.php هو:


                                <?php
 namespace Post;
 
 use Post\Model\Post;
 use Post\Model\PostTable;
 use Post\Model\Category;
 use Post\Model\CategoryTable;
 use Zend\Db\ResultSet\ResultSet;
 use Zend\Db\TableGateway\TableGateway;
 use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
 use Zend\ModuleManager\Feature\ConfigProviderInterface;

 class Module implements AutoloaderProviderInterface, ConfigProviderInterface
 {
     public function getAutoloaderConfig()
     {
         return array(
             'Zend\Loader\ClassMapAutoloader' => array(
                 __DIR__ . '/autoload_classmap.php',
             ),
             'Zend\Loader\StandardAutoloader' => array(
                 'namespaces' => array(
                     __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                 ),
             ),
         );
     }

     public function getConfig()
     {
         return include __DIR__ . '/config/module.config.php';
     }
     public function getServiceConfig()
     {
         return array(
             'factories' => array(
                 'Post\Model\PostTable' =>  function($sm) {
                     $tableGateway = $sm->get('PostTableGateway');
                     $table = new PostTable($tableGateway);
                     return $table;
                 },
                 'PostTableGateway' => function ($sm) {
                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                     $resultSetPrototype = new ResultSet();
                     $resultSetPrototype->setArrayObjectPrototype(new Post());
                     return new TableGateway('post', $dbAdapter, null, $resultSetPrototype);
                 },
                 'Post\Model\CategoryTable' =>  function($sm) {
                    $tableGateway = $sm->get('CategoryTableGateway');
                    $table = new CategoryTable($tableGateway);
                    return $table;
                },
                'CategoryTableGateway' => function ($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    $resultSetPrototype = new ResultSet();
                    $resultSetPrototype->setArrayObjectPrototype(new Category());
                    return new TableGateway('category', $dbAdapter, null, $resultSetPrototype);
                },
             ),
         );
     }
 }
                            

3- الملف autoload_classmap.php

فهاد الملف فقط غادي نزيدو واحد ل array vide على حساب ما دايرين ف la documentation :

                                <?php
 return array();
                            

4- إضافة لمجلد Post للملف composer.json

فالملف composer.json غادي نزيدو ل configuration ديالنا فغادي نزيد هاد الكود فبه :
"autoload": {     
   "psr-0": { "Post": "module/Post/src/" } 
},
منبعد غادي تدير الأمر composer update متنساش تكون داخل لل projet بالكوموند : 
cd c:\wamp\www\zend-blog
منبعد غادي تمشي للمجلد vendor/composer/autoload_namespaces.php 
تما غادي تلقا namespace Post تزاد :



                                    <?php

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);

return array(
    'ZendXml\\' => array($vendorDir . '/zendframework/zendxml/library'),
    'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'),
    'Post' => array($baseDir . '/module/Post/src'),
);
                                

5- الملف module.config.php

منبعد فالمجلد Post/config زيد ملف جديد فيه سميه module.config.php فيه غادي تكون ل configuration فكنحددو ل controllers و les routes ول views ديالنا ولي غادي نزيدوهم من بعد الكود ديال الملف هو:

                                    <?php
return array(
     'controllers' => array(
         'invokables' => array(
             'Post\Controller\Post' => 'Post\Controller\PostController',
             'Post\Controller\Category' => 'Post\Controller\CategoryController',
         ),
     ),
     // The Post route
     'router' => array(
        'routes' => array(
            'post' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/post[/:action][/:id]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Post\Controller\Post',
                        'action'     => 'index',
                    ),
                ),
            ),
            'category' => array(
                'type'    => 'segment',
                'options' => array(
                    'route'    => '/category[/:action][/:id]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Post\Controller\Category',
                        'action'     => 'index',
                    ),
                ),
            ),
        ),
     ),
     'view_manager' => array(
         'template_path_stack' => array(
             'Post' => __DIR__ . '/../view',
         ),
     ),
 );
                                


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

بحث في الموقع


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