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

imadbelasri Cakephp
CA

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


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


- الملف UsersController.php

كنمشي ل src/controller وكنزيد controller جديد سميتو UsersController.php يكون الكود ديالو فيه methode register لي كتمكن من إضافة مستخدم لقاعدة البيانات من بعد مكتحقق من أن جميع الحقول عمرها المستخدم وفحالة العكس كيتم عرض رسالة خطأ كتضمن الحقول لي خصها تملئ و methode login لي كتمكن من تسجيل دخول المستخدم وكتحقق من أن المعلومات لي دخل المستخدم فعلا كاينة فقاعدة البيانات ولي يلا مكنتش كتعرض رسالة خطأ وهي أيضا كتحقق من ان المستخدم ملئ جميع الحقول الكود ديال الملف هو :

                                                    
                                                        <?php

namespace App\Controller;

use App\Controller\AppController;
use Cake\Event\Event;

class UsersController extends AppController
{
    //allow to the user to have access to just some actions
    public function beforeFilter(Event $event)
    {
        parent::beforeFilter($event);
        $this->Auth->allow(['index','browse','view','find','register','logout']);
    }
    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Flash'); // Include the FlashComponent
    }
    public function register()
    {
        $user = $this->Users->newEntity();
        if ($this->request->is('post')) {
            $user = $this->Users->patchEntity($user, $this->request->data);
            if ($this->Users->save($user)) {
                $this->Flash->success(__('Utilisateur ajouté avec succés.'),[
                    'params' => [
                        'class' => 'alert alert-success'
                    ]
                ]);
                return $this->redirect(['action' => 'register']);
            }else  if($user->errors()){
                $error_msg = [];
                foreach( $user->errors() as $errors){
                    if(is_array($errors)){
                        foreach($errors as $error){
                            $error_msg[] = $error;
                        }
                    }else{
                        $error_msg[] = $errors;
                    }
                }
                if(!empty($error_msg)){
                   foreach($error_msg as $error){
                        $this->Flash->error(__($error),[
                            'params' => [
                                'class' => 'alert alert-danger'
                            ]
                        ]);
                   }
                }
            }else{
                $this->Flash->error(__("Impossible d'ajouter l'utilisateur."),[
                    'params' => [
                        'class' => 'alert alert-danger'
                    ]
                ]);
            }
        }
        $this->set('title','Emploi.com|Inscription');
        $this->set('user', $user);
    }
    public function login()
    {
        if ($this->request->is('post')) {
            $user = $this->Auth->identify();
            if ($user) {
                $this->Auth->setUser($user);
                return $this->redirect($this->Auth->redirectUrl());
            }
            $this->Flash->error(__('Email ou mot de passe est incorrect'),[
                'params' => [
                    'class' => 'alert alert-danger'
                ]
            ]);
        }
        $this->set('title','Emploi.com|Connexion');
    }

    public function logout()
    {
        return $this->redirect($this->Auth->logout());
    }
}
                                                    
                                                

- الملف UsersTable.php

منبعد كنمشي لModel/Table وكنزيد ملف كنسميه UsersTable.php هاد الملف هو لي كيمكني باش نتحقق من ان المستخدم ملء جميع الحقول لي فملف التسجيل وعرض رسائل الخطأ فحالة ما كان شي حقل فارغ الكود ديال الملف هو :

                                                        
                                                            <?php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class UsersTable extends Table
{
    public function validationDefault(Validator $validator)
    {
        $validator
            ->notEmpty('nom','Le champ nom est obligatoire')
            ->requirePresence('nom')
            ->notEmpty('prenom','Le champ prenom est obligatoire')
            ->requirePresence('prenom')
            ->notEmpty('email','Le champ email est obligatoire')
            ->requirePresence('email')
            ->notEmpty('password','Le champ mot de passe est obligatoire')
            ->requirePresence('password');
        return $validator;
    }

}
                                                        
                                                    

- الملف User.php

منبعد كنمشي لModel/Entity وكنزيد ملف كنسميه User.php هاد الملف هو لي غادي يمكن من تشفير كلمة المرور ديال المستخدم ملي يتسجل فقاعدة البيانات الكود ديال الملف هو :

                                                        
                                                            <?php
namespace App\Model\Entity;

use Cake\Auth\DefaultPasswordHasher;
use Cake\ORM\Entity;

class User extends Entity
{

    // Rend les champs assignables en masse sauf pour le champ clé primaire "id".
    protected $_accessible = [
        '*' => true,
        'id' => false
    ];

    // ...

    protected function _setPassword($password)
    {
        return (new DefaultPasswordHasher)->hash($password);
    }

    // ...
}
                                                        
                                                    

- الملف register.ctp

من بعد كنمشي للمجلد Template وكنزيد مجلد جديد كنسميه users فيه كنزيد ملف جديد سميتو register.ctp هاد الملف هو لي غادي يكون فيه لForm لي غادي يمكن المستخدم من التسجيل فالموقع الكود ديال الملف هو :

                                                        
                                                            <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">Inscription</h2>
                <?php echo $this->Form->create($user, ['url' => ['action' => 'register'],'class'=>'well']);?>
                <div class="form-group">
                    <?php echo $this->Form->input('Nom*', ['required' => false,'name'=>'nom','placeholder'=>'Entrer le nom','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Prénom*', ['required' => false,'name'=>'prenom','placeholder'=>'Entrer le prénom','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Email*', ['required' => false,'type'=>'email','name'=>'email','label'=>'email*','placeholder'=>'Entrer le email','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Pseudo*', ['required' => false,'name'=>'username','placeholder'=>'Entrer le pseudo','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Mot de passe*', ['required' => false,'type'=>'password','name'=>'password','placeholder'=>'Entrer le passe','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->button('Créer compte',['class'=>'btn btn-success']); ?>
                </div>
             </div>
             <?php echo $this->Form->end();?>
        </div>   
    </div>
</div>
                                                        
                                                    

- الملف login.ctp

دائما فالمجلد users كنزيد ملف جديد سميتو login.ctp هاد الملف هو لي غادي يكون فيه ل Form لي غادي يمكن المستخدم من تسجيل الدخول ديالو أي يتكونيكطا الكود ديال الملف هو :

                                                        
                                                            <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">Connexion</h2>
                <?php echo $this->Form->create();?>
                <div class="form-group">
                    <?php echo $this->Form->input('Pseudo*', ['required' => false,'name'=>'username','placeholder'=>'Entrer le pseudo','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->input('Mot de passe*', ['required' => false,'type'=>'password','name'=>'password','placeholder'=>'Entrer le passe','class'=>'form-control']); ?>
                </div>
                <div class="form-group">
                    <?php echo $this->Form->button('Connexion',['class'=>'btn btn-success']); ?>
                </div>
             </div>
             <?php echo $this->Form->end();?>
        </div>   
    </div>
</div>