PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نگاهی به نسخه جدید لاراول ۵٫۳



pamenary
August 12th, 2016, 16:00
امکانات لاراول ۵٫۳

لاراول توی نسخه ۵٫۲ تغییرات کوچکی داشت، تغییراتی که کار برنامه نویس رو برای کنترل تعداد درخواستهایی یک آدرس آی پی ساده میکردن، یا امکان استفاده از چند مرجع برای تشخیص هویت کاربران و لاگین بودن اونا. برای مثال وقتی جدولی دارید که ادمین های سیستم رو اونجا نگه میدارید و جدولی دارید که دانش آموزهارو ذخیره میکنید میتونید با استفاده از متدهای تعریف شده روی Auth نسبت به هر یک از جدولها اونارو احراز هویت کنید. امکان خوب ایجاد ساختار Auth به شکل خودکار رو هم میتونید توی نسخه ۵٫۲ ببینید و همینطور implicit model binding که امکان اضاف کردن مدل مورد نظرتون رو به روت میده. همینطور امکان دسته بندی یا گروه بندی middleware ها رو تو نسخه ۵٫۲ دارید. امکان اعتبارسنجی آرایه ها هم جالب بود و کاربردی که یکتا بودن مقادیر یک آرایه رو میشد باهاش بررسی کرد، برای مثال یکتا بودن تمام ایمیلهایی که توی یک آرایه هستن رو میشه با این امکان چک کرد.
هرچند لاراول ۵٫۳ در نسخه developer در دسترس هست اما با نزدیک شدن laracon 2016 میتونیم منتظر معرفی رسمی لاراول ۵٫۳ باشیم. در این مقاله سعی میکنیم امکاناتی که با معرفی لاراول ۵٫۳ ارائه میشن رو بررسی کنیم.
امکان رول بک کردن مایگریشن ها به تعداد قدمهای مشخص

حتما با این مساله روبرو شدید که بخواید مایگریشنهایی که به واسطه اونها تغییراتی روی دیتابیس اعمال کردید رو برگردونید. اما تا به حال این امکان در دو حالت وجود داشت. یا باید قدم به قدم برگردونید یا تمام مایگریشنها رو یکباره برگردونید. در لاراول ۵٫۳ امکان مشخص کردن تعداد قدمها به وجود اومده. با دستور زیر میتونید به راحتی به روش زیر این کار رو انجام بدید.
php artisan migrate:rollback --step=1

php artisan migrate:rollback --step=1


این یه ابزار مفید برای افزایش سرعت هست.

دسترسی به متغیر حلقه در blade

در نسخه ۵٫۳ لاراول امکان دسترسی به متغیر حلقه به وجود اومده. این موضوع میتونه بسیار کاربردی باشه. برای کنترل براساس شماره حلقه دست ما باز میمونه. برای استفاده میتونید از نمونه های زیر استفاده کنید.



@if($loop->first) Do something on the first iteration.@endif @if($loop->last) Do something on the last iteration.@endif


واکشی مدلهای مورد نیاز برای اجرای عملیات صف بندی شده

لاراول امکان خوبی برای قراردادن عملیات مورد نظر در صف انجام ارائه میکند. برای مثال میتوانید به جای منتظر گذاشتن کاربر برای فرستادن ایمیل خوش آمدگویی، این کار را در صف اجرا قرار دهید و در پس زمینه این کار را انجام دهید. برای این کار یک کلاس با قابلیت صف بندی ایجاد میکنید پارامترهای لازم را میپذیرد. اما تصور کنید که در این مثال ایمیل فرد را به عنوان پارامتر بفرستید و کاربر پیش از رسیدن زمان ارسال متوجه شود ایمیل خود را اشتباه وارد کرده و بخواهد ایمیل خود را تصحیح کند. آنگاه مشکلی که پیش خواهد آمد واضح است. ایمیلی که قرار بود برای آن پیام خوش آمدگویی فرستاده شود دیگر معتبر نیست. حال با واکشی مدل در لحظه اجرای کار میتوان این مشکل را حل کرد. امکان این کار در نسخه ۵٫۳ لاراول به وجود آمده است.
یعنی به جای







$user = User::find(1); dispatch(new SendWelcomeEmail($user->email));

میتوان از این روش استفاده کرد


$user = User::find(1); dispatch(new SendWelcomeEmail($user));


امکان شخصی سازی صفحه بندی ساده (Simple Pagination)

صفحه بندی در لاراول خیلی ساده انجام میشه. شما کافیه متد paginate رو صدا بزنید و خروجی رو به view بفرستید. توی view کافیه از متد links() استفاده کنید برای نمایش دادن صفحه های اطلاعات. اما این صفحه بندی تا نسخه ۵٫۲ به سختی قابل شخصی سازی بود. اما از پستهای توییتر آقای اوتول Taylor Otwell (@taylorotwell) خبر میرسه امکان این کار در نسخه ۵٫۳ به سادگی فراهم شده.

امکان فرستادن پارامترهای بیشتر به firstOrCreate

این نیاز رو جوزف سیلبر اینجوری مطرح میکنه
گاهی میخوای از پارامترهایی برای جستجو استفاده کنی اما اگه اون مدل وجود نداره میخوای یه مدل جدید ایجاد کنی. برای مثال فرض کنید میخواید از گیت هاب OAuth برای ورود استفاده کنید. برای اینکار از ID گیت هاب برای بررسی وجود کاربر استفاده میکنید، اما اگر کاربر جدیدی دارید ثبت میکنید میخواید آواتارش رو هم ذخیره کنید. پیش از این تغییر باید این کار رو میکردید
$user = User::firstOrNew(['github_id', $githubUser->id]); if (! $user->exists) { $user->fill(['avatar' => $githubUser->avatar])->save(); } return $user;







$user = User::firstOrNew(['github_id', $githubUser->id]); if (! $user->exists) { $user->fill(['avatar' => $githubUser->avatar])->save();} return $user;

اما توی تغییر جدید میتونید با استفاده از یک خط کد به شکل زیر انجامش بدید:
return User::firstOrCreate(['github_id', $githubUser->id], ['avatar' => $githubUser->avatar]);

return User::firstOrCreate(['github_id', $githubUser->id], ['avatar' => $githubUser->avatar]);




میتونید روال این تغییر رو توی گیت هاب (https://github.com/laravel/framework/pull/13236) دنبال کنید.

خروجی Query Builder در نسخه ۵٫۳ لاراول collection خواهد بود

تا به حال خروجی متدهای Query Builder از جنس آرایه بود. اما در نسخه ۵٫۳ این خروجی از جنس collection لاراول خواهد بود. این موضوع باعث خواهد شد بتوان از امکانات مربوط به کالکشن به خوبی استفاده کرد. روال اعمال این تغییر را در این درخواست ترکیب گیت هاب (https://github.com/laravel/framework/pull/10552) میتوانید ببینید.
بارگذاری مایگریشنها از مکانهای مختلف

این فیچر بیشتر به کار توسعه پکیج ها میاد. موقع اضاف کردن یه پکیج مرحله 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 بازمیگرداند.

pamenary
August 27th, 2016, 21:04
اقا یک سوال استفاده از فریم ورک برای کد نویسی پی اچ پی روی امنیت سایت تاثیر نداره؟

خیلی تاثیر داره دیگه درگیر SQL injection, XSS و... نیستی

iHSG
August 27th, 2016, 21:33
خیلی تاثیر داره دیگه درگیر SQL injection, XSS و... نیستی

البته اگه فقط دلیل رو این بدونید جسارت نباشه اما این یعنی تنبلی چون بدون فریم ورک هم میشه تمامی این موارد رو رعایت کرد نیاز هم نیست هر بار به قول شما درگیر باشیم فقط یه بار روش های خاصش رو یادبگیریم دفعات بعدی براحتی می تونیم انجام بدیم.تازه اینطوری روش Customize شده نسبت به نیاز های پروژه خودمون هم داریم :) البته من به شخصه استفاده از فریم ورک رو بیشتر برای تجربه کار با اونا و کسب مهارت درشون می دونم چون شرکت هایی که تو روزنامه ها آگهی استخدام برای برنامه نویس PHP می خوان اکثراً دنبال برنامه نویس فریم ورک هستن و از این نظر یادگیریشون مزیت حساب میشه.البته از این نظر باید تمامی فریم ورک ها رو بلد باشید چون حتی هنوز که هنوزه خیلی از شرکت ها من می بینم تو روزنامه دنبال برنامه نویس PHP با مهارت در فریم ورک های قدیمی مثل CakePHP هم هستن.

البته نمیشه از ویژگی توسعه همزمان یه پروژه با فریم ورک ها توسط چندین نفر گذشت ولی به نظر من برای ما ایرانی ها که اکثراً تک نفری برنامه نویسی میکنیم تک نفری سایت خدماتی میزنیم تک نفری شرکت میزنیم و... حتی MVC هم لزومی نداره چه برسه به فریم ورک های قدرتمند و غنی تازه استفاده از فریم ورک برای فقط برنامه نویسی یه نفره باعث میشه اول کار خیلی هم گیج بشید چون موقعی که پروژه دست چندین نفر هست حداقل هر کسی مسئول یه بخش از اون همه بخش یه فریم ورک هست ولی وقتی تک نفری باشه یکم سخت میشه.

pamenary
August 28th, 2016, 13:33
البته اگه فقط دلیل رو این بدونید جسارت نباشه اما این یعنی تنبلی چون بدون فریم ورک هم میشه تمامی این موارد رو رعایت کرد نیاز هم نیست هر بار به قول شما درگیر باشیم فقط یه بار روش های خاصش رو یادبگیریم دفعات بعدی براحتی می تونیم انجام بدیم.تازه اینطوری روش Customize شده نسبت به نیاز های پروژه خودمون هم داریم :) البته من به شخصه استفاده از فریم ورک رو بیشتر برای تجربه کار با اونا و کسب مهارت درشون می دونم چون شرکت هایی که تو روزنامه ها آگهی استخدام برای برنامه نویس PHP می خوان اکثراً دنبال برنامه نویس فریم ورک هستن و از این نظر یادگیریشون مزیت حساب میشه.البته از این نظر باید تمامی فریم ورک ها رو بلد باشید چون حتی هنوز که هنوزه خیلی از شرکت ها من می بینم تو روزنامه دنبال برنامه نویس PHP با مهارت در فریم ورک های قدیمی مثل CakePHP هم هستن.

البته نمیشه از ویژگی توسعه همزمان یه پروژه با فریم ورک ها توسط چندین نفر گذشت ولی به نظر من برای ما ایرانی ها که اکثراً تک نفری برنامه نویسی میکنیم تک نفری سایت خدماتی میزنیم تک نفری شرکت میزنیم و... حتی MVC هم لزومی نداره چه برسه به فریم ورک های قدرتمند و غنی تازه استفاده از فریم ورک برای فقط برنامه نویسی یه نفره باعث میشه اول کار خیلی هم گیج بشید چون موقعی که پروژه دست چندین نفر هست حداقل هر کسی مسئول یه بخش از اون همه بخش یه فریم ورک هست ولی وقتی تک نفری باشه یکم سخت میشه.

بله حق با شما خیلی فریم ورک وسیع و خیلی کار سریع می کنه مخصوصا تو پروژه های تیمی خیلی کد نویسی لذت بخش می کنه