گرفتن جمع رکورد های برگشتی در لاراول ۵.۸

گاهی لازمه بدونیم یک مدل ما در رابطه با مدل دیگه ای (چند به چند و یک به چند) چه تعداد نتیجه داره؟ برای مثال میخوایم بدونیم این پست من چه تعداد کامنت داره؟ یک عدد میخوام.

برای یک مدل فقط کافیه از متد count بصورت زیر استفاده کنم. (چند نمونه مثال)

نمایش تعداد کامنت های یک کاربر
$user->comments->count();

نمایش تعداد کل پست های یک کاربر در زیر یک پست (برای مثال: تاکنون ۶۵ نوشته از این نویسنده انتشار داده شده)
$post->user->posts->count();

اما وقتی چند مدل/ چند رکورد از دیتابیس رو گرفتیم و میخوایم برای هر کدوم چیزی رو بشماریم از روش زیر استفاده میکنیم:

نمایش تعداد کامنت های هر پست

$posts = App\Post::withCount('comments')->get();

foreach ($posts as $post) {
    echo $post->comments_count;
}

یا شمارنده های با فیلتر بیشتر یا چند شمارنده

use Illuminate\Database\Eloquent\Builder;

$posts = App\Post::withCount(['votes', 'comments' => function (Builder $query) {
    $query->where('content', 'like', 'foo%');
}])->get();

echo $posts[0]->votes_count;
echo $posts[0]->comments_count;

 

منبع: Counting Related Models

چطور در جاوااسکریپت آرایه ها را با هم یکی کنیم و به هم بچسبانیم؟

در جاوا اسکریپت متدی وجود داره که با اون میتونیم دو یا چند آرایه رو به هم متصل کنیم. نتیجه این متد آرایه فعلی را تغییری نمیدهد بلکه آرایه جدیدی به return میکنه که شامل آرایه های جمع شدست.

 array1.concat(array2, array3, ..., arrayX)

قائده کلیش به این صورت بالاست. آرایه ای رو در ابتدا concat میکنیم و بعد آرایه های دیگه رو بعنوان پارامتر به اون میدیم. اگر فهرست آرایه هارو میخواین بصورت پارامتر وارد کنین، ابتدا یک آرایه خالی تعریف کنین که با فهرست آرایه هاتون concat میشه.

var hege = ["Cecilie", "Lone"];
var stale = ["Emil", "Tobias", "Linus"];
var kai = ["Robin"];
var children = hege.concat(stale, kai);

 

منبع: JavaScript Array concat() Method

نصب Vue با مدیریت بسته yarn

Vue برای نصب نیاز به مدیریت بسته Node.js همون npm داره یا اینکه میتونین اون رو از طریق یارن هم نصب کنین. از اینجا یاد بگیرید چطور مدیریت بسته یارن yarn رو نصب کنین

نکته: اگر قبلا vue رو نصب کردین حتما اون رو پاک کنین خصوصا اگر نسخه ۱ اونو دارین با دستور  remove vue-cli پاکش کنین.
نکته۲: vue قبلا با نام بسته vue-cli شناخته میشد و الان نام اون تغییر کرده به @vue/cli

برای نصب vue یکی از دو دستور زیر npm یا yarn رو استفاده کنین که من یارن رو ترجیح میدم چون خیلی سریعتر و بهتره.

npm install -g @vue/cli
# OR
yarn global add @vue/cli

برای نصب این بسته ها با دسترسی ادمین باشین تا بتونین نصبش کنین.

این دستور vue رو بصورت global رو سیستم شما نصب میکنه و بعد نصب شما به دستور vue دسترسی دارین. برای اینکه چک کنین آیا نصب شده یا نه به راحتی فقط نام اون رو تایپ کنین vue. که بهتون راهنمای کار با دستور vue و لیستی از دستورات موجود رو نشون میده.

با دستور زیر میتونین ببینین که چه نسخه ای رو نصب کردین

vue --version

یا اگر قبلا یارن رو رنصب کردین با دستور زیر اون رو آپدیت کنین:

npm update -g @vue/cli

# OR
yarn global upgrade --latest @vue/cli

 

چطور بر روی اوبونتو ۱۸ مدیریت بسته yarn رو نصب کنیم؟

اول از همه بهتون بگم یارن چیه؟ yarn یک مدیر پکیج های جاوا اسکریپت هست که با مدیریت بسته های نود npm سازگاره و به ما کمک میکنه بصورت خودکار کارهای نصب آپدیت و تنظیمات و پاک کردن پکیج های npm رو انجام بدیم.

یارن برای این بوجود اومد که مجموعه ای از مشکلات npm رو حل کنه، مانند بالا بردن سرعت نصب پکیج ها با دستورات موازی و کاهش خطاهای مرتبط با ارتباطات شبکه ای.

در این آموزش ما یاد میگیریم چطور با استفاده از پکیج منجیر اوبونتو APT یارن رو روی اوبونتو ۱۸ نصب کنیم. مخازن رسیمیه یارن بصورت مدام بروز میشن و این خیلی خوبه که از مخازن رسمی اونو نصب کنین.

قبل شروع نصب یارن یادتون باشه که با با کاربر روت باشین یا با دسترسی های اون کارهای نصب رو انجام بدین. (sudo).

۱. اولین قدمی اینه که مخزن یارن رو فعال کنین. بوسیلیه کد زیر کلید مخزن GPG  رو درون ریزی کنین.

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -

بوسیله دستور زیر مخازن یارن رو به مخازن سیستمتون اضافه کنین:

echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

۲. بعد اینکه مخزن یارن به لیست مخازن سیستم اضافه شد، لیست پکیج ها رو بروزرسانی کنین و سپس یارن رو نصب کنین.

sudo apt update
sudo apt install yarn

۳. برای اینکه چک کنین یارن نصب شده یا نه کد زیر رو بزنین و از ورژن نصب شده مطلع بشین:

yarn --version

 

منبع: How to Install Yarn on Ubuntu 18.04

نحوه عوض کردن میانبر تغییر زبان در ابونتو ۱۸ به آلت و شیفت

برای اینکه میانبر تغییر زبان رو در اوبونتو ۱۸ به آلت و شیفت تغییر بدیم مراحل زیر رو دنبال کنین تا بهتون بگم:

۱. برنامه گنوم توپیکس رو نصب کنین:

sudo apt-get install gnome-tweaks

۲. گنوم توپیکس رو باز کنین، میتونین با زدن دکمه سوپر و نوشتن عبارت gnome tweaks اونو جستجو و بازش کنین.

۳. کیبورد و موس رو انتخاب کنین

۴. رو گزینه «Additional Layout Options button» کلیک کنین.

۵. گزینه «Switching to another layout» رو باز کنین

۶. میانبری که میخواین رو انتخاب کنین

gnome tweaks

gnome tweaks

منبع: ۱۸٫۰۴ ctrl+shift to change language

چطور در اوبونتو برای باز کردن فولدر Home میانبر تعریف کنیم؟

برای تعریف میانبر برای باز کردن Files Manager و یا باز کردن فولدر Home کافیه دکمه Super رو بفشارید و تایپ کنید shortcuts و اینتر بزنین. یا از Settings > Shortcuts رو انتخاب کنین.

حالا در این صفحه تایپ کنین Home Folder که همون اولاس. بعد انتخابش دکمه میانبر رو بزنین. من Super + E رو زدم مشابه عادتی که در ویندوز داشتم.

تعریف میانبر برای باز کردن Files

موفق باشید.

متد های PUT PATCH DELETE در لاراول

اول از همه بریم سراغ متد های PUT PATCH DELETE این متد ها روش های انتقال دیتا در کنار POST GET هستن و کمتر استفاده شدن و درموردشون کمتر خوندیم و شنیدیم. اما درواقع لیست متد های تقاضاهای HTTP شامل PUT PATCH DELETE POST GET HEAD OPTIONS TRACE CONNECT میشن. که ما بیشتر از همه با POST GET کار کردیم و حالا در لاراول میخوایم از چند تای دیگشون استفاده کنیم. قبلش یه نگاه سریع بهشون بندازیم که اصلا چی هستن و برای چی استفاده میکنیم؟

حالا این نکته رو تو ذهنتون داشته باشید که CRUD مخفف اول کلمات Create Read Update Delete هست.

متد GET برای نمایش یا گرفتن داده خاص مثل یک محصول، یا یک نوع محصول یا لیست محصولات استفاده میشه.

متد POST برای ارسال یک داده به سرور استفاده میشه و معمولا برای Create کردن.

متد PUT برای ارسال داده و جایگزین کردن آن با مقادیر فعلی استفاده میشه. Update

متد PATCH هم برای ارسال داده و بروزرسانی استفاده میشه. فرقش با بالایی اینه که اون جایگزین میکنه کلا، این ویرایش میکنه. که شامل بخشی از اونه اصظلاحا Modify میکنه. اینم میشه Update

متد DELETE که مشخصه برای حذف کردنه.

میرسیم سراغ متد های فرعی که شامل این مبحثمون نمیشه ولی میگم:

متد HEAD مثل متد GET میمونه اما با فرق اینکه بدنه رو نمیگیره و فقط head رو میگیره. داده هایی که در هد صفحه موجوده.

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

متد OPTIONS برای مشخص کردن گزینه های ارتباط با منبع مورد نظر استفاده میشود. (سخت نگیرید – سرچ کنید)

متد TRACE هم برای بررسی مسیر رفت و برگشت بسته.

همونطور که میدونیم HTML در فرم هاش از متد های PUT PATCH DELETE پشتیبانی نمیکنه، لاراول برای پشتیبانی از این route ها از ما میخواد فیلدی رو در فرممون با نام _method تعریف کنیم و مقدار اون رو برابر متد مورد نظر قرار بدیم. برای مثال کد زیر رو ببینین:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

در بلید برای سرعت بیشتر میتونیم از @method استفاده کنیم که این کد رو برامون جنریت میکنه و البته، متد فرم همچنان باید POST باشه.

<form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
</form>

 

منبع:
Form Method Spoofing
HTTP request methods
HTTP Request Methods
متد های http
تفاوت بین متدهای HTTP شامل GET, POST, PUT, PATCH, DELETE

توکن CSRF فرم ها در لاراول

لاراول فرم ها رو در برابر حمله های CSRF محافظت میکنه. درخواست های سایت ها / سرور های دیگر از درخواست های یک کاربر اهراز شده جدا میشن. برای اینکار لاراول یک توکن CSRF برای هر کاربر ایجاد میکنه با اینکار چک میکنه آیا این درخواست برای همین کاربر هست یا نه؟!

برای اینکار هرزمان که ما یک فرم در HTML مینویسیم باید حتما یک توکن CSRF رو در فیلد های HTML از نوع input با مقدار توکن ایجاد کنیم. اینکار به میدلور لاراول این امکان رو میده صحت درخواست مارو بررسی کنه. برای راحتی تنها نیاز به نوشتن @csrf  داخل فرم بلیدمون داریم.

<form method="POST" action="/profile">
    @csrf
    ...
</form>

همچنین میتونیم این توکن رو در هدر صفحه هم ارسال کنیم:

<meta name="csrf-token" content="{{ csrf_token() }}">

یا توسط جاوا اسکریپت:

$.ajaxSetup({
    headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
});

اطلاعات بیشتر درباره CSRF Protection

نمایش و مدیریت کاربران لاگین کرده در لاراول

بنا به دلایل مختلف ممکنه نیاز پیدا کنیم که بدونیم کدوم کاربران ما الان لاگین کردن و چه اطلاعاتی از اونها داریم. برای مثال با چه دستگاه هایی لاگین کردن، از کجا لاگین کردن و… یا حتی محدودیت برای لاگین بخوایم بذاریم! سشن ها در لاراول در جاهای مختلفی میتونن ذخیره بشن مثل فایل ها، دیتابیس، کوکی، memcache / redis و آرایه ها (تنظیمات سشن در لاراول). برای مدیریت بهتر سشن ها اون ها رو در دیتابیس ذخیره میکنیم که امکانات زیادی به ما میده از قبیل مدیریت زمان، دسته بندی، مدیریت دستگاه ها، تعداد دستگاه ها و…

دستورات زیر رو اجرا کنین تا لاراول شما آماده بشه:

php artisan session:table
 
composer dump-autoload
 
php artisan migrate

 

حالا داخل فایل config/session.php  درایور سشن رو به database  تغییر بدین.

ایزی ایزی تمام تمام. همین! برین دیتابیس رو نگاه کنین و راحت کوئری بزنین و کاربران رو همونطور که میخواین لیست کنین، مدیریت کنین.

احتمالا نیاز پیدا کنین که کش کانفیگ رو کلیر کنین پس حتما انجامش بدین.

منبع: Display user devices there application is currently logged in and option to logout in Laravel

نصب VirtualBox 6 برو روی Ubuntu 18.04

برای نصب VirtualBox 6 بر روی اوبونتو ۱۸ ابتدا بروز رسانی های ابتدایی رو با اجرای دستورات زیر انجام بدین:

sudo apt update
sudo apt upgrade

بعد اینکه بروز رسانی انجام شد کلید های عمومی اوراکل رو به پکیج های رجیستر شده سیستم اضافه میکنیم:

wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

بعد نیاز داریم که Oracle VirtualBox PPA رو به اوبنتو اضافه کنیم، دستورات زیر رو اجرا کنین تا ضافه بشه.

sudo add-apt-repository "deb http://download.virtualbox.org/virtualbox/debian bionic contrib"

این کار یه مخزن جدید به مخازن سیستم اوبونتو اضافه میکنه. بعد اینکه اضافه کردین با دستور sudo apt update مخازن رو بروزرسانی میکنیم. اگر حین بروزرسانی با خطای زیر مواجه شدین، بهتر راه حل رفع این خطا رو از اینجا بخونین.

این خطا:
N: Skipping acquire of configured file ‘contrib/binary-i386/Packages’ as repository ‘http://download.virtualbox.org/virtualbox/debian bionic InRelease’ doesn’t support architecture ‘i386’

خب حالا که همه چی رو درست انجام دادین، با دستور sudo apt install virtualbox-6.1 راحت VirtualBox 6 رو نصب کنین.

نکته: در آموزش اصلی ورژن ۶ بود که من ۶.۱ رو نصب کردم.
نکته ۲: برای جستجو ورژن های جدید/موجود از این مقاله استفاده کنین

نصب VirtualBox 6.1 بر روی اوبونتو ۱۸

منبع زبان اصلی برای نصب VirtualBox 6 بر روی Ubuntu 18.04