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

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

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


1- الملف cars/index.blade.php


فالمجلد views زيد مجلد جديد سميه cars فيه زيد ملف جديد سميه index.blade.php هادا الملف لي فيه الكود لي كيمكن من عرض جميع السيارات لي عندنا فقاعدة البيانات من بعد مكنستقبلوهم من fonction index لي فالملف CarsController.php كنخدم بforeach لي كتمكني من عرض كل معلومة خاصة بكل سيارة فبلاصتها الكود ديال الملف هو :

                                    
                                        @extends('includes.layout-main')

@section('styles')

@endsection

@section('header')
    @include('includes.header')
@endsection

@section('content')
<div class="col-md-11 col-offset-md-1">
    <div class="panel panel-primary" style="margin-top:30px">
        <h4 class="panel-heading" style="margin-top:-1px">Toutes les voitures</h4>
        @if(count($cars) > 0)
            @foreach($cars as $car)
            <div class="media" style="padding:20px;">
                <div class="media-left">
                    <a href="{{route('cars.show',$car->id)}}">
                    <img class="media-object" src="{{URL::to('images/'.$car->image)}}" alt="..." height="100" width="100">
                    </a>
                </div>
                <div class="media-body">
                    <h4 class="media-heading text-info">{{$car->marque}}</h4>
                    <span class="label label-primary">Model:{{$car->model}}</span>
                    <span class="label label-danger">Type:{{$car->type}}</span>
                </div>
            </div>
            <hr>
            @endforeach
        @else
        <div class="alert alert-info">Aucune Voiture</div>
        @endif
    </div>
</div>
@endsection

@section('footer')
    @include('includes.footer')
@endsection

@section('scripts')

@endsection
                                    
                                

2- الملف cars/view.blade.php


دائما فالمجلد cars فيه زيد ملف جديد سميه view.blade.php هادا الملف لي فيه الكود لي كيمكن من عرض المعلومات الخاصة بسيارة اختارها المستخدم من بعد مكنستقبلوهم من fonction show لي فالملف CarsController.php فكن tester يلا كانت السيارة disponible كنعرض الزر لي كيمكن المستخدم من كرائها مكنتش كنعرض رسالة كتبين للمستخدم ان السيارة غير متوفرة حاليا الكود ديال الملف هو :

                                    
                                        @extends('includes.layout-main')

@section('styles')

@endsection

@section('header')
    @include('includes.header')
@endsection

@section('content')
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <div class="panel panel-primary" style="margin-top:30px">
            <h4 class="panel-heading" style="margin-top:-1px">{{$car->marque}}</h4>
            <div class="row">
                <div class="col-md-12">
                    <div align="center">
                        <img src="{{URL::to('images/'.$car->image)}}" alt="..." height="300" width="300">
                        <div class="caption">
                            <?php session(['car_id' => $car->id]);?>
                            <p><span class="label label-primary">Model: {{$car->model}}</span>
                            <span class="label label-danger">Type: {{$car->type}}</span>
                            <span class="label label-default">Prix/Jour: {{$car->prixJ}} dh</span></p>
                            @if($car->dispo)
                                @if(Auth::user())
                                <p><a href="{{route('commands.create')}}" class="btn btn-primary" role="button">Réserver</a></p>
                                @else
                                <p><a href="{{url('/login')}}" class="btn btn-primary" role="button">Réserver</a></p>
                                @endif 
                            @else
                            <p>
                                <h2 class="text text-warning">Non Disponible</h2>
                            </p>
                            @endif
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

@section('footer')
    @include('includes.footer')
@endsection

@section('scripts')

@endsection
                                    
                                

3- الملف cars/hire.blade.php


دائما فالمجلد cars فيه زيد ملف جديد سميه hire.blade.php هادا الملف لي فيه الكود لي كيمكن المستخدم من كراء سيارة من بعد ما كيدخل تاريخ الكراء وفوقاش غادي يردها فل form ثم كترسل للfonction store لي غادي تكون فالملف CommandsController.php ولي غادي نزيدوه من بعد الكود ديال الملف هو :

                                      
                                        @extends('includes.layout-main')

@section('styles')

@endsection

@section('header')
    @include('includes.header')
@endsection

@section('content')
<div class="row">
    <div class="col-md-6 col-md-offset-3">
        @if(count($errors) > 0)
            @foreach($errors->all() as $error)
                <div class="alert alert-danger">{{$error}}</div>
            @endforeach
        @endif
        @if(Session::has('success'))
            <div class="alert alert-success">
                {{Session::get('success')}}
            </div>
        @endif
        <div class="panel panel-primary" style="margin-top:30px">
            <h4 class="panel-heading" style="margin-top:-1px">Louer une voiture</h4>
            <div class="row">
                <div class="col-md-8 col-md-offset-2">
                     {!!Form::open(['method'=>'POST','action'=>['CommandsController@store']])!!}
                        <div class="form-group">
                            <label for="dateL">Date de location:*</label>
                            <input type="date" class="form-control" name="dateL">
                        </div>
                        <div class="form-group">
                            <label for="dateR">Date de restitution:*</label>
                            <input type="date" class="form-control" name="dateR">
                        </div>
                        <div class="form-group">
                            {!! Form::submit('Valider',['class'=>'btn btn-primary']) !!}
                        </div>
                    {!! Form::close() !!}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

@section('footer')
  
@endsection

@section('scripts')

@endsection
                                      
                                    

4- الملف UsersController.php


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

                                        
                                            <?php

namespace App\Http\Controllers;
use App\User;
use App\Car;
use App\Command;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class UsersController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        $users = User::orderBy('created_at','DESC')->get();
        return view('admin.users.index',compact('users'));
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
        return view('users.register');
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        $this->validate($request,[
            'name' => 'required',
            'email' => 'required',
            'password' => 'required',
            'tel' => 'required',
            'ville' => 'required',
        ]);
        $user = new User();
        $user->nom = $request->name; 
        $user->email = $request->email; 
        $user->password = bcrypt($request->password); 
        $user->tel = $request->tel; 
        $user->ville = $request->ville; 
        $user->save();
        return redirect()->route('home')->with(['success'=>'Compte Crée']);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
        $user = User::find($id);
        return view('users.profile',compact('user'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
        $user = User::find($id);
        $user->delete();
        return redirect()->route('admin.index')->with(['success'=>'Utilisateur supprimé']);
    }
    public function login(Request $request){
        $this->validate($request,[
            'email' => 'required',
            'password' => 'required'
        ]);
        if (Auth::attempt(['email' => $request->email, 'password' => $request->password])) {
            // Authentication passed...
            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');
    }
    public function deleteCommand(Request $request,$id){
        $command = Command::find($id);
        $command->delete();
        $car = Car::find($request->car_id);
        $car->dispo = 1;
        $car->update();
        return redirect()->back();
    }
}

                                        
                                    

5- الملف User.php


من بعد ف app كنزيد ملف كنسميه User.php ولي عبارة عن model فيه fonction commands لي كتدير la relation مابين الجدول users وcommands ولي كتقولنا بلي المستخدم يمكن يدير commande او لا بزاف ديال les commandes الكود ديال الملف هو :

                                        
                                            <?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    public function commands(){
        return $this->hasMany('App\Command');
    }
}

                                        
                                    

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