لاراول نسخه ی جدید 8.47 رو به تازگی منتشر کرد. توی این پست امکانات و ویژگی های جدید این نسخه رو بهتون معرفی میکنم.
متد های Match و Match All در رشته ها
Luke Downing به توسعه روشهای Str::match()
و Str::matchAll()
کمک کرده. قبل از این تغییرات، این روش ها فقط با استفاده از یک نمونه Stringable
در دسترس بودن:
// works in previous releases
Str::of('xyz')->match('/(xyz)/');
// works as of 8.47
Str::match('/(xyz)/');
این ویژگی منطق اصلی رو به کلاس Str
انتقال میده و در نهایت Stringable
اجرای Str
رو فراخوانی میکنه.
محدودهی سرویس کانتینر نمونه های لاراول
Mohamed Said در توسعه binding scoped singletons کمک کرد. این ویژگی تنها گزینه ای هستش که موقع تغییر کانتکس (context) برنامه، کار فلاش (flush) یا شستشو رو انجام میده:
$this->app->scoped('service', function (){
return new Service(...);
});
موارد استفادهی این ویژگی شامل درخواست های جدید در لاراول اکتان (Laravel Octane) هستش که وظیفه پردازش یه کار جدید در صف و غیره رو داره.
روش اسکوپ (Scoped) یک کلاس یا اینترفیس رو به کانتینر (container) متصل میکنه. که فقط باید یک بار نمونه رو در یک چرخه حیات (lifecycle) لاراول بصورت درخواست (request) یا کار (job) مشخص کنه.
مستندات این بخش رو میتونید از سایت لاراول مطالعه کنید.
متد whereContains در JSON Assertion
Steve Bauman در کلاس AssertableJson
از متد whereContains()
استفاده کرد.
موقع اجرای تست ها، برای من سخت بود که بدونم داخل آرایه JSON چه مقادیری وجود دارن. همچنین نتایج خارج از سفارش (out-of-order) که من کنترل دقیقی بر مرتب سازی آن ها ندارم.
این متد جدید موقع آزمایش یک نقطه پایانی JSON که نتایج دیتابیس رو برمیگردونه، مفیده. چون میتونید تست کنید که مجموعه آرایه های تو در تو، شامل تمام مواردی که از هر جهت مد نطرتون بود، هست یا نه.
مقایسه ها به روشی دقیق برای پیروی از سایر روشهای کلاس AssertableJson انجام میشن.
برای نمونه، درخواست های ارسال شده به گیت رو میتونید ببینید:
$assert = AssertableJson::fromArray([
'foo' => [1,2,3],
'bar' => 'baz',
]);
// Passes:
$assert->whereHas('foo', 1);
$assert->whereHas('foo', [2,3]);
$assert->whereHas('bar', 'baz');
// Fails:
$assert->whereHas('foo', '1'); // Property [foo] does not contain [1].
$assert->whereHas('foo', 4); // Property [foo] does not contain [4].
$assert->whereHas('foo', [3,4]); // Property [foo] does not contain [4].
$assert->whereHas('bar', ['bar','baz']); // Property [bar] does not contain [bar].
اجازه استفاده از tap() در نمونه صفحه بندی لاراول
Mior Muhammad Zaki توانایی استفاده از tap()
رو در نمونه های صفحه بندی (paginatior) ایجاد کرده. در اینجا مثالی از شکل ظاهری قبل و بعد این تغییر رو میتونیم ببینیم:
// Before
$posts = App\Models\Post::search('Laravel')->paginate();
$posts->load('author');
// After
App\Models\Post::search('Laravel')
->paginate()
->tap(function ($posts) {
$posts->load('author');
});
منبع : laravel-news.com