نگاهی به نسخه جدید لاراول ۵٫۳

لاراول ۵٫۳
امکانات لاراول ۵٫۳
لاراول توی نسخه ۵٫۲ تغییرات کوچکی داشت، تغییراتی که کار برنامه نویس رو برای کنترل تعداد درخواستهایی یک آدرس آی پی ساده میکردن، یا امکان استفاده از چند مرجع برای تشخیص هویت کاربران و لاگین بودن اونا. برای مثال وقتی جدولی دارید که ادمین های سیستم رو اونجا نگه میدارید و جدولی دارید که دانش آموزهارو ذخیره میکنید میتونید با استفاده از متدهای تعریف شده روی Auth نسبت به هر یک از جدولها اونارو احراز هویت کنید. امکان خوب ایجاد ساختار Auth به شکل خودکار رو هم میتونید توی نسخه ۵٫۲ ببینید و همینطور implicit model binding که امکان اضاف کردن مدل مورد نظرتون رو به روت میده. همینطور امکان دسته بندی یا گروه بندی middleware ها رو تو نسخه ۵٫۲ دارید. امکان اعتبارسنجی آرایه ها هم جالب بود و کاربردی که یکتا بودن مقادیر یک آرایه رو میشد باهاش بررسی کرد، برای مثال یکتا بودن تمام ایمیلهایی که توی یک آرایه هستن رو میشه با این امکان چک کرد.
هرچند لاراول ۵٫۳ در نسخه developer در دسترس هست اما با نزدیک شدن laracon 2016 میتونیم منتظر معرفی رسمی لاراول ۵٫۳ باشیم. در این مقاله سعی میکنیم امکاناتی که با معرفی لاراول ۵٫۳ ارائه میشن رو بررسی کنیم.
امکان رول بک کردن مایگریشن ها به تعداد قدمهای مشخص
حتما با این مساله روبرو شدید که بخواید مایگریشنهایی که به واسطه اونها تغییراتی روی دیتابیس اعمال کردید رو برگردونید. اما تا به حال این امکان در دو حالت وجود داشت. یا باید قدم به قدم برگردونید یا تمام مایگریشنها رو یکباره برگردونید. در لاراول ۵٫۳ امکان مشخص کردن تعداد قدمها به وجود اومده. با دستور زیر میتونید به راحتی به روش زیر این کار رو انجام بدید.
1 |
php artisan migrate:rollback --step=1 |
این یه ابزار مفید برای افزایش سرعت هست.
دسترسی به متغیر حلقه در blade
در نسخه ۵٫۳ لاراول امکان دسترسی به متغیر حلقه به وجود اومده. این موضوع میتونه بسیار کاربردی باشه. برای کنترل براساس شماره حلقه دست ما باز میمونه. برای استفاده میتونید از نمونه های زیر استفاده کنید.
1 2 3 4 5 6 7 |
@if($loop->first) Do something on the first iteration. @endif @if($loop->last) Do something on the last iteration. @endif |
واکشی مدلهای مورد نیاز برای اجرای عملیات صف بندی شده
لاراول امکان خوبی برای قراردادن عملیات مورد نظر در صف انجام ارائه میکند. برای مثال میتوانید به جای منتظر گذاشتن کاربر برای فرستادن ایمیل خوش آمدگویی، این کار را در صف اجرا قرار دهید و در پس زمینه این کار را انجام دهید. برای این کار یک کلاس با قابلیت صف بندی ایجاد میکنید پارامترهای لازم را میپذیرد. اما تصور کنید که در این مثال ایمیل فرد را به عنوان پارامتر بفرستید و کاربر پیش از رسیدن زمان ارسال متوجه شود ایمیل خود را اشتباه وارد کرده و بخواهد ایمیل خود را تصحیح کند. آنگاه مشکلی که پیش خواهد آمد واضح است. ایمیلی که قرار بود برای آن پیام خوش آمدگویی فرستاده شود دیگر معتبر نیست. حال با واکشی مدل در لحظه اجرای کار میتوان این مشکل را حل کرد. امکان این کار در نسخه ۵٫۳ لاراول به وجود آمده است.
یعنی به جای
1 2 3 |
$user = User::find(1); dispatch(new SendWelcomeEmail($user->email)); |
میتوان از این روش استفاده کرد
1 2 3 |
$user = User::find(1); dispatch(new SendWelcomeEmail($user)); |
امکان شخصی سازی صفحه بندی ساده (Simple Pagination)
صفحه بندی در لاراول خیلی ساده انجام میشه. شما کافیه متد paginate رو صدا بزنید و خروجی رو به view بفرستید. توی view کافیه از متد links() استفاده کنید برای نمایش دادن صفحه های اطلاعات. اما این صفحه بندی تا نسخه ۵٫۲ به سختی قابل شخصی سازی بود. اما از پستهای توییتر آقای اوتول Taylor Otwell (@taylorotwell) خبر میرسه امکان این کار در نسخه ۵٫۳ به سادگی فراهم شده.
امکان فرستادن پارامترهای بیشتر به firstOrCreate
این نیاز رو جوزف سیلبر اینجوری مطرح میکنه
گاهی میخوای از پارامترهایی برای جستجو استفاده کنی اما اگه اون مدل وجود نداره میخوای یه مدل جدید ایجاد کنی. برای مثال فرض کنید میخواید از گیت هاب OAuth برای ورود استفاده کنید. برای اینکار از ID گیت هاب برای بررسی وجود کاربر استفاده میکنید، اما اگر کاربر جدیدی دارید ثبت میکنید میخواید آواتارش رو هم ذخیره کنید. پیش از این تغییر باید این کار رو میکردید
1234567 $user = User::firstOrNew(['github_id', $githubUser->id]);if (! $user->exists) {$user->fill(['avatar' => $githubUser->avatar])->save();}return $user;اما توی تغییر جدید میتونید با استفاده از یک خط کد به شکل زیر انجامش بدید:
1 return User::firstOrCreate(['github_id', $githubUser->id], ['avatar' => $githubUser->avatar]);
میتونید روال این تغییر رو توی گیت هاب دنبال کنید.
خروجی Query Builder در نسخه ۵٫۳ لاراول collection خواهد بود
تا به حال خروجی متدهای Query Builder از جنس آرایه بود. اما در نسخه ۵٫۳ این خروجی از جنس collection لاراول خواهد بود. این موضوع باعث خواهد شد بتوان از امکانات مربوط به کالکشن به خوبی استفاده کرد. روال اعمال این تغییر را در این درخواست ترکیب گیت هاب میتوانید ببینید.
بارگذاری مایگریشنها از مکانهای مختلف
این فیچر بیشتر به کار توسعه پکیج ها میاد. موقع اضاف کردن یه پکیج مرحله Publish هم وجود داره یا اینکه باید مایگریشنها رو از پوشه vendor/package/database/migrations به database/migrations کپی کنیم. در لاراول ۵٫۳ با استفاده از متد loadMigrationsFrom(‘آدرس پوشه مایگریشنها’) این نیاز برطرف میشه. و این موضوع وقتی نسخه جدید یک پکیج ارائه میشه نمود بیشتری پیدا میکنه، چرا که دیگه نیازی به کپی کردن مایگریشنهای مربوطه وجود نداره. تنها نیازی که هست اجرای فرمان معروف php artisan migrate هست
بهبود در انتشار عمومی event با استفاده از فیچر جدید Echo
این فیچر بهبود بسیاری در زمینه انتشار event و نحوه تعامل آن با Pusher در لاراول ایجاد میکند.
تابع کمکی جدید cache
این تابع کمکی به سادگی امکان استفاده از cache را فراهم میکند. سه کارکرد اصلی آن get، put و return هست که به راحتی قابل استفاده خواهد بود.
- cache(‘abc’, null): در صورت وجود مقدار ارائه شده آن را برمیگرداند و در غیر اینصورت مقدار پیش فرض یعنی null را بازمیگرداند.
- cache([‘abc’ => ‘def’], 5): برای مدت زمان ۵ دقیقه مقدار کلید abc را برابر با def قرار میدهد.
- cache(): نمونه ای از CacheManager بازمیگرداند.
امیدواریم در این پست توانسته باشیم تعدادی از امکانات ارائه شده در نسخه ۵٫۳ لاراول را ارائه کنیم.
با سلام
لطفا اموزش کانفیگ کردن HTTPS رو هم بزارید
بعد از خرید ssl چه کارهایی باید انجام بدیم
با تشکر
ممنون از پیشنهاد خوبتون. توی برنامه پستها گذاشتیم
سلامی دوباره
بی زحمت اموزش storage امن رو بزارید یعنی کنترل شده باشه
یه فایلی رو بزاریم و شخص دانلود کننده ادرس url اون رو بصورت encrypt شده ببینه دقیقن مثل لینک های دانلود laracasts
تشکر
بله حتما. تلاش میکنیم انجامش بدیم
سلام
چطوری می توانیم از این نسخه پیش از release نهایی استفاده کنیم.
شخصی سازی pagination کاری برای من کاربرد دارد.
تنها باید نسخه مورد نظرتون رو بگیرید. https://github.com/laravel/framework. فقط کافیه برنچ مورد نظرتون رو بگیرید
سلام اساتیدسایت من سایت خودم را با لاراول ساختم و آپلود کردم این خطا را بهم میده برای چی هست در ضمن تو لوکال هاست این خطا را نداشتم
سایت http://r-script.ir/
خطا:
Parse error: syntax error, unexpected T_CLASS, expecting T_STRING or T_VARIABLE or ‘$’ in /home/rscripti/public_html/index.php on line 50
سلام . کد خط ۵۰ در فایل مورد نظر را بفرمیاد چی هست تا ما راهنماییتون کنیم .
سلام خسته نباشید میشه در مورد event در لاراول هم مقاله بزارید مرسی
با سلام . بله حتما .
سلام
می خواهم از ۵٫۲ به ۵٫۳ برم میشه بهم دستورش را بدهید با کمک Composer می خواهم این کار را انجام بدهم.
با سلام . با دستور ممکن نیست . لطفا این صفحه رو مطالعه فرمایید : https://laravel.com/docs/master/upgrade#upgrade-5.3.0
سلام در مورد scout چرا چیزی نگفتین؟
سلام
لطفا در مورد ماژولار کردن لاراول هم صحبت کنید.
مثل وردپرس که میشه افزونه روش نصب کرد.
و مثلا بخش بلاگ، بخش کانتکت، بخش شاپ به صورت ماژولار به سایت اضافه بشن، فعال یا غیر فعال بشن.
و در مورد چند زبانه کردن هم پستی را منتشر کنید.
و در مورد Multi Auth هم صحبت کنید.
و مطلبی هم در مورد انتشار سایت در هاست های اشتراکی در سایت قرار بدین.
ممنون
میشه بفرمایید که هاستتون رو از کجا گرفتین؟
در هاست های اشتراکی امکان استفاده از خط فرمان نیست، چطور باید مایگریشن ها رو اجرا کرد.
چطوری میشه بعد از اتمام پروژه، اینستالر درست کرد، به صورتی که دیتابیس و جداول و سیدها به صورت خودکار ایجاد بشه؟
و اگر بخوایم شبکه اجتماعی مثلا سایتی مثل فی سبوک بزنیم، باید از کدام دیتابیس استفاده کنیم. مای اس کیو ال، مانگو دی بی، یا سایر دیتابیس ها؟
و طرز استفاده از مانگو دی بی را در قالب یک پروژه کوچک شرح دهید لطفا
سپاس
معمولا امکانش به دلیل مشکلات امنیت وجود نداره. در مورد بقیه موارد هم امیدواریم به زودی مطالبی رو منتشر کنیم
JSON Where Clauses یکی دیگر از امکانات به درد بخور این نسخس
سلام
ممنون از زحمات شما، چرا دیگه مطالب مفید مثل اینهایی که تا به حال نوشتید، منتشر نمی کنید؟
به زودی دوباره شروع به فعالیت میکنیم. ممنون از توجهتون
وافعا ممنونم به خاطر اطلاعات خوبتون
خواهش میکنم. خوشحال اطلاعات براتون مفید بوده. البته نسخه ۵٫۴ لاراول هم ارائه شده که ما هنوز موفق به نوشتن مطلبی در موردش نشدیم توی سایت