آموزش ساخت اپلیکیشن مدیریت وظایف با لاراول : قسمت اول

دسته بندی: برنامه نویسی
سطح مقاله: متوسط
زمان مطالعه: 7 دقیقه
۱۸ خرداد ۱۳۹۸

در مقالات قبلی راه اندازی اولیه یک پروژه با لاراول را آموزش دادیم. در این سری مقالات قصد داریم یک وب اپلیکیشن مدیریت وظیفه یا Task Scheduler را با استفاده از فریمورک محبوب لاراول بسازیم. در این سری از آموزش دوباره راه اندازی لاراول صرف نظر می کنیم و فرض را بر آن می گذاریم که شما توانایی آن را دارید. اما اگر با این موضوع آشنایی ندارید حتما ابتدا مقاله ما با عنوان آموزش نصب لاراول را مطالعه کنید.

آموزش ساخت یک برنامه مدیریت وظیفه با لاراول

آموزش لاراول

پس از راه اندازی پروژه با استفاده از دستور php artisan serve سرور را راه اندازی کنید. در صورت درست بودن روند راه اندازی صفحه خوش آمدگویی لاراول را مشاهده خواهید کرد. قرار است یک پروژه مدیریت وظیفه با قابلیت انجام عملیات CRUD بنویسیم. بنابراین به استفاده از دیتابیس احتیاج داریم. برای اتصال به دیتابیس ابتدا باید مشخصات آن را به لاراول معرفی کنیم. برای این کار به فایل .env در پوشه اصلی پروژه بروید و در قسمت مربوط به دیتابیس مشخصات دیتابیس خود را وارد کنید. البته قبل از آن حتما یک دیتابیس با نام دلخواه خود بسازید. ما در اینجا یک دیتابیس به نام scheduler ساخته ایم و این مشخصات را برای اتصال آن با لاراول وارد می کنیم:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=scheduler
DB_USERNAME=root
DB_PASSWORD=

قبل از هرچیز باید بدانیم که دقیقا در حال نوشتن چه پروژه ای هستیم. قرار است اپلیکیشنی بنویسیم که وظایف جدید می توانند در آن اضافه شوند. این وظایف می توانند در مواقع نیاز ویرایش یا حذف شوند. وضعیت هر وظیفه با نام status مشخص می شود. status به طور پیشفرض دارای مقدار Undone است که نشان می دهد وظیفه هنوز انجام نشده. اما به طور کلی status می تواند این حالات را بپذیرد:

  • Undone برای وظایفی که انجام نشده اند
  • Done برای وظایفی که انجام شده اند
  • Cancel برای وظایفی که از آن ها صرف نظر شده است
  • Migrated برای وظایفی که به بعد موکول شده اند

بنابراین جدول tasks یا وظایف ما در دیتابیس می تواند شامل این ستون ها باشد:

  • ستون id
  • ستون title برای عنوان وظیفه
  • ستون description برای توضیحات مربوط به وظیفه
  • ستون status برای نشان دادن وضعیت وظیفه

خط فرمان را در پوشه اصلی پروژه باز کرده و این دستور را در آن وارد کنید:

php artisan make:migration create_tasks_table

این دستور یک مایگریشن برای ساخت جدول وظایف یا tasks ایجاد می کند. به مسیر database>migrations بروید و مایگریشن مربوط به tasks را باز کنید. کد های متد up() را به شکل زیر تغییر دهید:

    public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->text('description');
            $table->enum('status', ['Undone', 'Done' , 'Cancel' , 'Migrated'])->default('Undone');
            $table->timestamps();
        });
    }

در کد بالا id را به صورت یک مقدار BigIncrements در نظر گرفتیم. BigIncrements یک شمارنده id ایجاد می کند که خود به خود با اضافه شدن هر رکورد اضافه می شود. اما در ورژن های قبل از 5.8 لاراول این مقدار را از نوع Increments وارد می کردیم. تفاوت BigIncrements و Increments تنها در این است که اولی اعدادی از نوع BigInteger تولید می کند. این کار باعث می شود در id های با اعداد بزرگ با ارور مواجه نشویم.

ستون status به صورت enum در نظر گرفته شده و مقادیر پیشفرضی که در بالا گفتیم برای آن در نظر گرفته شده است. قبل از اجرای مایگریشن دو مایگریشن مربوط به جداول users و remember_passwords را پاک کنید. چرا که در این پروژه چیزی به عنوان ثبت نام در نظر نگرفته ایم. حال دوباره به سراغ خط فرمان بروید و دستور زیر را وارد کنید:

Php artisan migrate

به دیتابیس خود بروید. همانطور که مشاهده می کنید دو جدول با نام های migrations و tasks در دیتابیس ایجاد شده است.

رفع مشکل حداکثر طول رشته

در صورتی که AppServiceProvider خود را تنظیم نکرده باشید، احتمال دارد بعد از وارد کردن دستور migrate یک ارور دریافت می کنید. برای رفع این مشکل به مسیر App>Providers>AppServiceProvider.php بروید و در متد register() این کد را وارد کنید:

Schema::defaultStringLength(191);

جمع بندی

تا اینجای کار، عملیات مربوط به ایجاد دیتابیس های پروژه مدیریت وظایف را انجام دادیم. در قسمت بعد مدل ها و کنترلر های لازم برای پروژه را خواهیم ساخت. برای ساخت اولین پروژه لاراولی خود تا پایان این مجموعه با ما همراه باشید. در صورتی که با اجرای کدهای بالا مشکلی داشتید آن را با در میان بگذارید تا در بر طرف کردن آن با شما همراه باشیم.

بیشتر مطالعه کنید : 

چه امتیازی به این مقاله می دید؟
نویسنده

نظرات کاربران

امین

سلام
ممنون از آموزش مفیدتون ، ببخشید 3 تا سوال داشتم :
1- من الان 6 نوع دیتا تایپ برای ذخیره زمان که در زیر نوشتم رو تست کردم و هر چهار تاشون تاریخ رو به یک شکل ذخیره میکردن !
الان سوالم اینه که فرق این چهار نوع داده در لاراول چیه پس؟! مخصوصا گفته که اونایی که Tz دارن تایم زون رو ذخیره میکنن ولی من در هر 6 مورد تونستم با ست کردن تایم زون تهران در app.php براحتی تاریخ مطابق با منطقه زمانی دلخواهمو نشون بدم خب پس چرا اومده 6 تا متد تعریف کرده وقتی که هر 6 تاشون یک کار رو انجام میدن؟
2- الان یه تیبل میسازیم بعدا بنابه دلایلی تصمیم میگیریم که تایپ یکی از ستونای جدولمون رو تغییر بدیم و نمیخوایم دیتای وارد شده رو از دست بدیم ، مثلا میخوایم نوع داده ستون title رو از string به text تغییر بدیم برای اینکار چه دستوری باید بزنیم در php artisan ؟
3- من لاراول رو نصب کردم بعد بعد برای اینکه در صفحه ایندکس نشون بده اومدم کد ,htaccess زیر رو گذاشتم و خب مشکل حل شد و در url اصلی سایت نمایش داده میشه فقط مشکلی که هست هنوزم در URL>>> صفحه site.com/public سایت با همون محتوا قابل مشاهدست چیکار کنم که این محتوا مشاهده نشه و فقط از صفحه اصلی سایت site.com قابل مشاهده باشه؟
ممنون

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]
    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php
</IfModule>

$table->dateTime(‘created_at’);
$table->dateTimeTz(‘created_at’);
$table->timestamp(‘added_on’);
$table->timestampTz(‘added_on’);
$table->timestamps();
$table->timestampsTz();
امین

سلام
ممنون از آموزش مفیدتون ، ببخشید 3 تا سوال داشتم :
1- من میخوام برای ذخیره تاریخ ها از نوع داده datetime بدلیل بازه زمانی نامحدودش استفاده کنم ، اگر من از این نوع داده استفاده کنم برای ذخیره کردن چطوری تایم زون رو هم داشته باشم؟ یعنی الان یه داده ثبت میشه ساعت 9 صبح به وقت تهران میخوام برای نمایش به کاربر همین 9 صبح به وقت تهران نمایش داده بشه آیا نیاز به انجام کاری نیست ، چون با timeStamps که استفاده کردم کار خاصی انجام ندادم و با همون نمایش عادی به وقت تهران نشون میداد ایا اینم همونطوریه یا خیر؟
2- الان یه تیبل میسازیم بعدا بنابه دلایلی تصمیم میگیریم که تایپ یکی از ستونای جدولمون رو تغییر بدیم و نمیخوایم دیتای وارد شده رو از دست بدیم ، مثلا میخوایم نوع داده ستون title رو از string به text تغییر بدیم برای اینکار چه دستوری باید بزنیم در php artisan ؟
3- من لاراول رو نصب کردم بعد بعد برای اینکه در صفحه ایندکس نشون بده اومدم کد ,htaccess زیر رو گذاشتم و خب مشکل حل شد و در url اصلی سایت نمایش داده میشه فقط مشکلی که هست هنوزم در URL>>> صفحه site.com/public سایت با همون محتوا قابل مشاهدست چیکار کنم که این محتوا مشاهده نشه و فقط از صفحه اصلی سایت site.com قابل مشاهده باشه؟
ممنون

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]
    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php
</IfModule>
امین

سوال یک رو به تایپ datetime تست کردم و درسته و بدون مشکل نشون داده
من الان 6 نوع دیتا تایپ زیر رو تست کردم و هر چهار تاشون تاریخ رو به یک شکل ذخیره میکردن !
الان سوالم اینه که فرق این چهار نوع داده در لاراول چیه پس؟! مخصوصا گفته که اونایی که Tz دارن تایم زون رو ذخیره میکنن ولی من در هر 6 مورد تونستم با ست کردن تایم زون تهران در app.php براحتی تاریخ مطابق با منطقه زمانی دلخواهمو نشون بدم خب پس چرا اومده 6 تا متد تعریف کرده وقتی که هر 6 تاشون یک کار رو انجام میدن؟

$table->dateTime(‘created_at’);
$table->dateTimeTz(‘created_at’);
$table->timestamp(‘added_on’);
$table->timestampTz(‘added_on’);
$table->timestamps();
$table->timestampsTz();
ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :

 
گزارش مشکل