موقع تواصل إجتماعي بإستعمال laravel الجزء الثاني

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

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


1- الملف UsersController.php


كنمشي ل app/Http/Controllers كنزيد ملف جديد كنسميه UsersController.php لي غادي تكون فيه fonction index لي كتوجه المستخدم لملف التسجيل لي غادي نزيدوه من بعد ونفس الشي بالنسبة ل fonction create منبعد كاين fonction store لي كتحقق من أن الحقول لي ترسلو من الملف register.blade.php مملوئين بالإضافة للأنهم ميكونوش أقل او فايتين واحد القدر من الحروف ثم كنسجل مستخدم جديد فقاعدة البيانات منبعد كاين getlogin لي فقط كتوجه المستخدم للملف الخاص بتسجيل الدخول ثم كاين login لي كتحقق من أن الحقول لي ترسلو من الملف login.blade.php مملوئين منبعد كتدير محاولة دخول بالإمايل وكلمة المرور لي دخل المستخدم يلا تمت بنجاح كترجعو للصفحة الرئيسية متمتش كتعرض رسالة خطأ من بعد كاين logout لي فقط كتمكن المستخدم باش يديكونيكطا الكود ديال الملف هو :

                                    
                                        <?php

namespace App\Http\Controllers;
use Auth;
use Illuminate\Http\Request;
use App\User;
use App\Http\Requests;

class UsersController extends Controller
{
    public function index()
    {
        return view('users.register');
    }
    public function create()
    {
        return view('users.register');
    }
    public function store(Request $request)
    {
        //
        $this->validate($request,[
            'email'=>'required|unique:users|max:250',
            'passe'=>'required|min:6|max:250',
            'pseudo'=>'required|unique:users|max:250'
        ]);
        User::create([
            'pseudo'=>$request->pseudo,
            'email'=>$request->email,
            'password'=>bcrypt($request->passe)
        ]);
        return redirect()->route('users.register')->with('success','Compte crée avec succés');
    }
    public function getlogin(){
        return view('users.login');
    }
    public function login(Request $request){
        $this->validate($request,[
            'email'=>'required|max:250',
            'passe'=>'required|min:6|max:250',
        ]);
        if(Auth::attempt(['email'=>$request->email,'password'=>$request->passe],$request->has('remember'))){
            return redirect()->route('home');
        }else{
            return redirect()->route('users.login')->with(['fail'=>'Email ou mot de passe est incorrect']);
        }
    }
    public function logout(){
        Auth::logout();
        return redirect()->route('home');
    }
}

                                    
                                

2- الملف User.php


من بعد ف app كنزيد ملف كنسميه User.php هادا لي غادي يمكني باش ندير les relations ما بين جدول المستخدمين والجداول الأخرى وغادي يكون فيه الكود لي كيمكن من إضافة صديق و حدف صديق فكاين fonction publications لي كتحدد بان كل مستخدم عندو بزاف ديال المنشورات ثم كاين fonction getImage لي كتمكن من إضافة صورة عشوائية للمستخدم بواسطة واحد الموقع لي كيعطيك صور عشوائية ثم كاين fonction getMyFriends لي كتقول بان المستخدم الحالي يمكن يكون صديق ديال واحد او بزاف ديال المستخدمين ثم كاين fonction getHisFriends لي كتقول بان مستخدم يمكن يكون عندو صديق او أكثر ثم كاين fonction friends لي كترجعلي الأصدقاء ديالي لي قبلت الدعوة ديالهم ثم fonction friendRequests لي كترجعلي الأصدقاء لي مازال ما قبلت الدعوة ديالهم ثمfonction friendRequestWaiting لي عندها نفس المهمة ثم fonction hasFriendRequestWaiting لي كتحقق من ان المستخدم لي صيفطلي الدعوة واش سابقلو مصيفطها ثم fonction addFriend لي كتزيد صديق ثم fonction removeFriend لي كتحدف صديق ثم fonction areFriends لي كتحقق واش جوج مستخدمين أصدقاء الكود ديال الملف هو :

                                    
                                        <?php

namespace App;
use Auth;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'nom','prenom','email', 'password','pseudo','ville','pays'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    public function publications(){
        return $this->hasMany('App\Publication');
    }
    public function getImage(){
        return $grav_url = "https://www.gravatar.com/avatar/" . md5( strtolower( trim( $this->email ) ) ) . "?d=mm&s=40";
    }
    public function getMyFriends(){
        return $this->belongsToMany('App\User','friends','user_id','friend_id');
    }
    public function getHisFriends(){
        return $this->belongsToMany('App\User','friends','friend_id','user_id');
    }
    public function friends(){
        return $this->getMyFriends()->wherePivot('accepted',true)->get()->merge($this->getHisFriends()->wherePivot('accepted',true)->get());
    }
    public function friendRequests(){
        return $this->getMyFriends()->where('accepted',false)->get();
    }
    public function friendRequestWaiting(){
        return $this->getHisFriends()->wherePivot('accepted',false)->get();
    }
    public function hasFriendRequestWaiting(User $user){
        return (bool) $this->friendRequestWaiting()->where('id',$user->id)->count();
    }
    public function addFriend(User $user){
        $this->getMyFriends()->attach($user->id);
    }
     public function removeFriend(User $user){
        $this->getMyFriends()->detach($user->id);
        $this->getHisFriends()->detach($user->id);
    }
    public function areFriends(User $user){
        return (bool) $this->friends()->where('id',$user->id)->count();
    }
}

                                    
                                

3- الملف register.blade.php


منبعد ف views كنزيد مجلد جديد كنسميه users فيه زيد ملف جديد سميه register.blade.php هادا الملف لي غادي يمكن المستخدم من التسجيل من بعد ما كيدخل المعلومات ديالو فل form ثم كترسل للfonction store لي ف UsersController بواسطة route users.register الكود ديال الملف هو :

                                      
                                        @extends('layouts.includes.main-index')

@section('content')
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <div class="panel panel-default">
                <h3 class="text-center text-primary">Inscription</h3>
                <div class="row">
                    <div class="col-md-8 col-md-offset-2">
                         <form action="{{route('users.register')}}" method="post" class="form-vertical">
                            <div class="form-group">
                                <label for="pseudo">Pseudo*</label>
                                <input type="text" name="pseudo" class="form-control{{$errors->has('pseudo') ? ' bordered' : ''}}" placeholder="Pseudo" value="{{Request::old('pseudo')}}">
                                @if($errors->has('pseudo'))
                                    <span style="color:red">{{$errors->first('pseudo')}}</span>
                                @endif
                            </div>
                            <div class="form-group">
                                <label for="email">Email*</label>
                                <input type="email" name="email" class="form-control{{$errors->has('email') ? ' bordered' : ''}}" placeholder="Email" value="{{Request::old('email')}}"> 
                                 @if($errors->has('email'))
                                    <span style="color:red">{{$errors->first('email')}}</span>
                                 @endif
                            </div>
                            <div class="form-group">
                                <label for="passe">Mot de passe*</label>
                                <input type="password" name="passe" class="form-control{{$errors->has('passe') ? ' bordered' : ''}}" placeholder="Passe">
                                 @if($errors->has('passe'))
                                    <span style="color:red">{{$errors->first('passe')}}</span>
                                 @endif
                           </div>
                            <div class="form-group">
                                <input type="submit" name="submit" class="btn btn-success" value="Créer compte">
                            </div>
                            <input type="hidden" name="_token" value="{{Session::token()}}"/>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection
                                      
                                    

4- الملف login.blade.php


دائما فالمجلد users زيد ملف جديد سميه login.blade.php هادا الملف لي غادي يمكن المستخدم من تسجيل الدخول ديالومن بعد ما كيدخل الإمايل و كلمة المرور ديالو فل form ثم كترسل للfonction login لي ف UsersController بواسطة route users.login هاد les routes غادي نزيدوهم من بعد فالملف routes.php الكود ديال الملف هو :

                                        
                                            @extends('layouts.includes.main-index')

@section('content')
    <div class="row">
        <div class="col-md-6 col-md-offset-3">
            <div class="panel panel-default">
                <h3 class="text-center text-primary">Connexon</h3>
                <div class="row">
                    <div class="col-md-8 col-md-offset-2">
                         <form action="{{route('users.login')}}" method="post" class="form-vertical">
                            <div class="form-group">
                                <label for="email">Email*</label>
                                <input type="email" name="email" class="form-control{{$errors->has('email') ? ' bordered' : ''}}" placeholder="Email" value="{{Request::old('email')}}"> 
                                 @if($errors->has('email'))
                                    <span style="color:red">{{$errors->first('email')}}</span>
                                 @endif
                            </div>
                            <div class="form-group">
                                <label for="passe">Mot de passe*</label>
                                <input type="password" name="passe" class="form-control{{$errors->has('passe') ? ' bordered' : ''}}" placeholder="Passe">
                                 @if($errors->has('passe'))
                                    <span style="color:red">{{$errors->first('passe')}}</span>
                                 @endif
                           </div>
                            <div class="form-group">
                                <input type="checkbox" name="remember"> Rester connecté
                            </div>
                            <div class="form-group">
                                <input type="submit" name="submit" class="btn btn-success" value="Connexion">
                            </div>
                            <input type="hidden" name="_token" value="{{Session::token()}}"/>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection
                                        
                                    

5- الملف index.blade.php


فالمجلد views كنزيد ملف جديد كنسميه index.blade.php هادا هو الملف ديال الصفحة الرئيسية ديالنا الكود ديال الملف هو :

                                        
                                            @extends ('layouts.includes.main-index')
@section('content')
    <div class="row">
        <div class="col-md-10 col-md-offset-2">
            <h1>Bienvenue sur chat+</h1>
        </div>
    </div>
@endsection
                                        
                                    

كلمات مفاتيح :