موقع إلكتروني من الصفر إلى الإحتراف بcakephp الجزء الثالت

موقع إلكتروني من الصفر إلى الإحتراف بcakephp الجزء الثالت


فهاد الجزء الثالت من المشروع ديالنا غادي نكملو باقي الصفحات لي غادي يمكنو المستخدم من تعديل معلومات خاصة بعرض عمل وأيضا الملفات الخاصة بالتسجيل وتسجيل الدخول.

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

- الملف edit.ctp

من بعد فالمجلد Offres غادي نزيد ملف نسميه edit.ctp ولي غادي يمكن من تعديل المعلومات الخاصة بعرض عمل الكود ديال edit.ctp هو :

                                <div class="row">
    <div class="col-md-11 col-md-offset-1 offre">
        <div class="row">
            <div class="col-md-6 col-md-offset-2">
                <h2 class="text-primary">Modifier une offre</h2>
                <?php echo $this->Form->create($offre, ['url' => ['action' => 'edit'],'class'=>'well']);?>
                <div class="form-group">
                    <?php echo $this->Form->input('Titre*', ['required' => false,'value'=>$offre->title,'name'=>'title','placeholder'=>'Entrer le titre','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Entreprise*', ['required' => false,'value'=>$offre->company_name,'name'=>'company_name','placeholder'=>'Entrer l\'entreprise','class'=>'form-control']); ?>
                </div>
                 <div class="form-group">
                    <?php echo $this->Form->input('Catégorie*',array(
                        'type'=>'select',
                        'options'=>$categories,
                        'empty'=>'Veuillez choisir une catégorie',
                        'class'=>'form-control',
                        'name'=>'category_id',
                    ));
                    ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Type*',array(
                        'type'=>'select',
                        'options'=>$types,
                        'empty'=>'Veuillez choisir un type',
                        'class'=>'form-control',
                        'name'=>'type_id',
                    ));
                    ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('quote', ['required' => false,'value'=>$offre->desc,'name'=>'desc','label'=>'Description*','rows'=>'5','cols'=>'40','placeholder'=>'Entrer la description','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Ville*', ['required' => false,'name'=>'ville','value'=>$offre->ville,'placeholder'=>'Entrer la ville','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Email*', ['required' => false,'name'=>'contact_email','value'=>$offre->contact_email,'placeholder'=>'Entrer votre email','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->button('Modifier',['class'=>'btn btn-success']); ?>
                </div>
             </div>
             <?php echo $this->Form->end();?>
        </div>   
    </div>
</div>
                            

- الملف OffresTable.php

ف cakephp وباش تجبد معلومات من جدول آخربالإعتماد على لid لازم يكون عندك ملف لي كيدير علاقة بين هاد 2 جداول فمثلا باش تعرض الtype ديال واحد العرض واش cddأوcdi بالإعتماد على type_id لي كاين فالجدول offres لازم تدير علاقة بين الجدول types و offres ولهادشي غادي نزيدو ملف جديد ف Model/Table ولي غادي نسميه OffresTable.php وهو لي غادي يمكني باش ندير العلاقة بين هاد 2 جداول الكود ديالو هو :

                                <?php
namespace App\Model\Table;
use Cake\ORM\Table;
class OffresTable extends Table
{
    public function initialize(array $config)
    {
        $this->belongsTo('Types', [
            'foreignKey' => 'type_id',
            'joinType' => 'INNER',
        ]);
        $this->belongsTo('Categories', [
            'foreignKey' => 'category_id',
            'joinType' => 'INNER',
        ]);
    }
}
                            

- الملف AppController.php

قبل ما ندوزو للجزء ديال إضافة المستخدمين لقاعدة البيانات وتسجيل الدخول لازم نديرو واحد التغيير على الملف src/Controller/AppController.php وغادي نزيدو الكود لي كيوجه المستخدم لصفحة معينة بعدما يسجل الدخول ديالو بنجاح و أيضا بعد تسجيل الخروج كما كاين لmethode beforeFilter لي كتمكن من تقييد الصلاحيات ديال الزائر فمثلا الزائر العادي معندوش الحق ف تعديل أوحذف عرض عمل باش تكون عندو هاد الصلاحية خاصو يكون مسجل الدخول ديالو الكود الكامل ديال الملف بعد التعديل هو :

                                <?php
namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Event\Event;

class AppController extends Controller
{
    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Auth', [
            'loginRedirect' => [
                'controller' => 'Offres',
                'action' => 'index'
            ],
            'logoutRedirect' => [
                'controller' => 'Offres',
                'action' => 'index',
                'home'
            ]
        ]);
    }
    public function beforeFilter(Event $event)
    {
       $this->Auth->allow(['index','browse','view','find','register','logout']);
    }
    /**
     * Before render callback.
     *
     * @param \Cake\Event\Event $event The beforeRender event.
     * @return \Cake\Network\Response|null|void
     */
    public function beforeRender(Event $event)
    {
        //authUser global
        $this->set('authUser',$this->Auth->user());
        if (!array_key_exists('_serialize', $this->viewVars) &&
            in_array($this->response->type(), ['application/json', 'application/xml'])
        ) {
            $this->set('_serialize', true);
        }
    }
}

                            

- الملف success.ctp

باش نتمكن من عرض الرسائل ديال النجاح أو الخطأ باستعمال bootstrap لازم نقوم بتغيير على ملفين لي كيمكنو من عرض الرسائل الأول success.ctp و error.ctp ولي كاينين ف Template/Element/Flash الكود ديالsuccess.ctp :

                                    <?php
if (!isset($params['escape']) || $params['escape'] !== false) {
    $message = h($message);
}
?>
<div class="<?= h($params['class']) ?>">
    <?= h($message) ?>
</div>
                                

- الملف error.ctp

الكود ديال الملف error.ctp :

                                    <?php
if (!isset($params['escape']) || $params['escape'] !== false) {
    $message = h($message);
}
?>
<div class="<?= h($params['class']) ?>">
    <?= h($message) ?>
</div>
                                


بحث في الموقع


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