Application de gestion d'un hôtel ب laravel 5.5 الجزء الأول


فهاد ال projet الجديد من سلسلة laravel غادي نشوفو كيفاش نقادو واحد Application de gestion d'un hôtel ب laravel 5.5  فالمستخدم كيمكنلو يدخل يحجز غرفة أو أكثر فالفندق منبعد مكيتسجل ويتكونيكطا من بعد كاين جهة الأدمن لي كيمكنلو يشوف les réservations لي عندو كما يمكنلو يطلع على les clients لي عندو بالإضافة ل des options أخرين.

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

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

أول شيء غادي تديرو هو تثبيت composer لي غادي يمكنك من تثبيت laravel يمكنلك تبحث عليه فغوغل وتحملو من الموقع الرسمي من بعد غادي تفتح cmd غادي نكتب الأمر
cd c:\xampp\htdocs
يلا كنتي خدام ب xampp كنتي خدام ب wamp سير
cd c:\wamp\www
من بعد غادي تديرالأمر:
composer create-project --prefer-dist  laravel/laravel gestion-hotel
الإسم ديال المشروع هو gestion-hotel من بعد ما يتزاد المجلد فwamp/www أو xampp/htdocs غادي تزيد قاعدة بيانات ف phpmyadmin وتسميها hotel-app فيها 5 ديال الجداول clients,rooms,reservations,admins,contacts الكود sql باش تزيد les tables هو :

                                --
-- Base de données :  `hotel-app`
--

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

--
-- Structure de la table `admins`
--

CREATE TABLE `admins` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



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

--
-- Structure de la table `clients`
--

CREATE TABLE `clients` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `lastname` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `address` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `zipCode` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `city` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


--
-- Structure de la table `contacts`
--

CREATE TABLE `contacts` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `message` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


--
-- Structure de la table `reservations`
--

CREATE TABLE `reservations` (
  `id` int(10) UNSIGNED NOT NULL,
  `date_in` date NOT NULL,
  `date_out` date NOT NULL,
  `client_id` int(10) UNSIGNED NOT NULL,
  `room_id` int(10) UNSIGNED NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



--
-- Structure de la table `rooms`
--

CREATE TABLE `rooms` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `floor` int(11) NOT NULL,
  `description` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '1',
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;



--
-- Structure de la table `users`
--

CREATE TABLE `users` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `email` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

--
-- Index pour les tables exportées
--

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

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

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


--
-- Index pour la table `reservations`
--
ALTER TABLE `reservations`
  ADD PRIMARY KEY (`id`),
  ADD KEY `reservations_client_id_index` (`client_id`),
  ADD KEY `reservations_room_id_index` (`room_id`);

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


--
-- AUTO_INCREMENT pour les tables exportées
--

--
-- AUTO_INCREMENT pour la table `admins`
--
ALTER TABLE `admins`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;
--
-- AUTO_INCREMENT pour la table `clients`
--
ALTER TABLE `clients`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;
--
-- AUTO_INCREMENT pour la table `contacts`
--
ALTER TABLE `contacts`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;

--
-- AUTO_INCREMENT pour la table `reservations`
--
ALTER TABLE `reservations`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;
--
-- AUTO_INCREMENT pour la table `rooms`
--
ALTER TABLE `rooms`
  MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0;


--
-- Contraintes pour la table `reservations`
--
ALTER TABLE `reservations`
  ADD CONSTRAINT `reservations_client_id_foreign` FOREIGN KEY (`client_id`) REFERENCES `clients` (`id`);
                            

2- الإتصال بقاعدة البيانات

من بعد فالملف env. لي فالمجلد الرئيسي ديال المشروع كنظيف عليه التغييرات لي غادي يمكنو باش نتصل بقاعدة البيانات الكود لي تغير هو :

                                DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=hotel-app
DB_USERNAME=root
DB_PASSWORD=
                            

3- الملف ContentsController.php

من بعد كانزيد ل Controller ديال الصفحة الرئيسية فكنمشي ل app/Http/Controllers كنزيد ملف جديد كنسميه ContentsController.php لي غادي تكون فيه fonction index لي كتوجه المستخدم للصفحة الرئيسية لي غادي نزيدوها من بعد الكود ديال الملف هو :

                                <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ContentsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        return view('contents.home');
    }

}
                            

4- الملف Client.php

من بعد ف app كنزيد ملف كنسميه Client.php ولي عبارة عن model فيه fonction reservations لي كتدير la relation مابين الجدول clients وreservations ولي كتقولنا بلي المستخدم يمكن يدير reservation او لا بزاف ديال  les reservations الكود ديال الملف هو :

                                    <?php

namespace App;

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

class Client extends Authenticatable
{
    use Notifiable;

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

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

5- الملف ClientsController.php

كنمشي ل app/Http/Controllers كنزيد ملف جديد كنسميه ClientsController.php لي غادي تكون فيه fonction index لي كتسترجع المستخدمين لي عندنا فقاعدة البيانات وكترسلهم للملف index ديال clients ولي غادي نزيدوه من بعد ثم كاين fonction create لي كتوجه المستخدم لملف التسجيل لي غادي نزيدوه من بعد منبعد ثم كاين fonction store لي كتحقق من أن الحقول مملوئين ثم كنسجل مستخدم جديد فقاعدة البيانات وكنوجهو للصفحة الرئيسية مع رسالة نجاح منبعد كاين fonction show لي كتعرض المعلومات الخاصة بمستخدم فالملف show ولي غادي نزيدوه من بعد ثم كاين fonction edit لي كتوجه المستخدم لملف الخاص بالتعديل ولي غادي نزيدوه من بعد منبعد كاين fonction update لي كتحقق من أن الحقول مملوئين ثم كنعدل المستخدم من بعد مكنسترجعو بل id ديالو وكنوجهو للصفحة الرئيسية مع رسالة نجاح ثم كاين fonction destroy لي كتمكن من حدف مستخدم من بعد مكتلقاه بل id ديالو وكتمسح معاه les reservations ديالو ولي كنديرها بفضل la relation لي هضرنا عليها ف Client.php ثم كاين getLogin لي كتوجه المستخدم لملف تسجيل الدخول منبعد كاين login لي ملي كيدخل المعلومات ديالو كتحقق من أن الحقول لي ترسلو مملوئين منبعد كتدير محاولة دخول بالإمايل وكلمة المرور لي دخل المستخدم يلا تمت بنجاح كترجعو للصفحة الرئيسية من بعد كاين logout لي فقط كتمكن المستخدم باش يديكونيكطا الكود ديال الملف هو :

                                    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Client;
use App\Reservation;
use App\Room;
use Auth;

class ClientController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
        return view('clients.index',['clients'=>Client::all()]);
    }

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

    /**
     * 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|min:6',
            'lastName' => 'required|min:6',
            'address' => 'required',
            'zipCode' => 'required',
            'city' => 'required',
            'password' => 'required|min:6',
            'email' => 'required',

        ]); 
        $client = new Client();
        $client->name = $request->name;
        $client->lastname = $request->lastName;
        $client->address = $request->address;
        $client->zipCode = $request->zipCode;
        $client->city = $request->city;
        $client->password = bcrypt($request->password);
        $client->email = $request->email;
        $client->save();
        return redirect()->route('home')->with(['success'=>'Compte crée avec succés']);
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
        $client = Client::findOrFail($id);
        return view('clients.show',compact('client'));
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
        $client = Client::findOrFail($id);
        return view('clients.edit',compact('client'));
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
        $client = Client::findOrFail($id);
         //
         $this->validate($request,[
            'name' => 'required|min:6',
            'lastName' => 'required|min:6',
            'address' => 'required',
            'zipCode' => 'required',
            'city' => 'required',
        ]); 
        $client->name = $request->name;
        $client->lastname = $request->lastName;
        $client->address = $request->address;
        $client->zipCode = $request->zipCode;
        $client->city = $request->city;
        $client->update();
        return redirect()->route('home')->with(['success'=>'Compte modifié avec succés']);
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
        $client = Client::findOrFail($id);
        foreach($client->reservations()->get() as $reservation){
            $room = Room::find($reservation->room_id);
            $room->status = 1;
            if($room->update()){
                $client->reservations()->delete();
                $client->delete();
                return redirect()->route('home')->with(['success'=>'Compte supprimé avec succés']);
            }
        }
        return redirect()->route('clients.index')->with(['fail'=>'Une erreur est survenue veuillez réessayer']);
    }
    public function getLogin(){
        return view('clients.login');
    }
    public function login(Request $request){
        $this->validate($request,[
            'password' => 'required|min:6',
            'email' => 'required',

        ]); 
        if( Auth::attempt(['email' => $request->email, 'password' => $request->password])){
            return redirect()->route('home');
        }else{
            return redirect()->route('clients.login')->with(['fail'=>'Email ou mot de passe est incorrect']);
        }
    }
    public function logout(){
        Auth::logout();
        return redirect()->route('home');
    }
}
                                


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

بحث في الموقع


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