بایگانی دسته: لاراول

شمارش در مدل

چطوری میشه تعداد سطرهای مدلمون رو شمرد؟

خب خیلی ساده با استفاده از:

خب این دستور درسته جواب میده ولی بعد از اجرای دستور زیر دقیقا این اتفاق می افته:

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

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

بعد از اجرای این دستور زمان اجرا خیلی جالب میشه.

منبع

Algolia_logo.svg

معرفی سرویس جستجوی Aloglia

جستجو هوشمند و سریع با  Aloglia

مدتی بود که محصولات جدیدی که به فروشگاه اضافه می‌شد، در جستجوی سایت نمایش داده نمی‌شد، پس در صدد بر اومدم ببینم مشکل از چی می‌تونه باشه، تا اینکه رسیدم به این که فروشگاه ما ازAlgolia استفاده می کنه و خب باعث شد از این سرویس باحال بیشتر بدونم.

روش کار Algolia:

روش کارکرد Algolia به این صورت هست که شما باید اطلاعاتی رو که مایل هستید در اون جستجو بشه باید  با استفاده از  RESTful JSON API به اکانت Algolia خودتون ارسال کنید. بعد از ارسال اطلاعات کافیه در سایت یا اپ خودتون با api ها اطلاعات رو با سرعتی بسیار عالی جستجو کنید.

یکی از علت های سریع بودن Algolia در استفاده از CDN های مختلفی هست که در مکان های مختلف دنیا قرار داده است.

مزیت Algolia به نسبت Elastic Search:

در وبلاگ Algolia  می‌تونید مقایسه این دو سیستم جستجو رو بخونید، من چند تا از نتیجه های تست رو برای شما قرار دادم .

algolia-performance

 

برای چه زبان‌هایی API Client داره:

algolia-apis

 

و البته ناگفته نمونه که  پلاگین‌هایی هم برای ورد پرس، مجنتو داره!

سایت مستندات Algolia

استفاده Algolia در لاراول:

کافیه که شما پکیج رسمی رو با composer نصب کنید

بعد از نصب به service provider اضافه ش کنید:

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

حالا config/algolia.php رو باز کنید و تنظیمات api key رو انجام بدید.

 

تا اینجا پکیج لاراول Algolia نصب شده و آماده به کار هست کافیه که Algolia رو در مدلی که می خواهید اطلاعات اون مدل قابل جستجو باشه استفاده کنید. توی مثال زیر مدل Contact رو برای جستجوی Algolia آماده کردیم

 

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

این پکیج بطور خودکار اسم مدل رو به عنوان اندیس یا index در نظر می گیره و در اکانت شما، اطلاعات مدل رو ارسال میکنه.

algolia-index-recds

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

عملکرد algolia در ۲۴ ساعت گذشته (سرویس Starter )و زمان های پاسخ :

algolia-data-reports

در این پست من سعی کردم یک آشنایی جزیی با  Algolia  داشته باشیم و خیلی مطالب بیشتری میشه گفت، چیزی که بیشتر از هر چیزی من رو مجذوب خودش کرده بود api خیلی عالی  Algolia  بود. حتما برای جنبه فان هم شده با این سرویس کار کنید.

maxresdefault

استثنا در middleware لاراول

استثنا در middleware لاراول:

این هفته در حال توسعه یک پکیج جدید لاراول بودم، به مشکلی برخوردم که هر چند راه حل خیلی ساده داشت ولی خب همین راه حل ساده چند ساعتی ذهنم رو مشغول کرده بود. برای همین تصمیم گرفتم توی یک پست کوتاه مشکل و راه حل رو بنویسم.

کاری که قرار بود انجام بشه این بود که، یک بخش از سایت رو برای کاربران مهمان نمایش باز باشه و نیازی به لاگین بشه، به زبان ساده تر، من باید کاری کنم که وقتی متد ‘showToGuest’ اجرا شد بتونه middleware auth رو دور بزنه و مجوز عبور داشته باشه.

برای ایجاد این چنین استثناهایی کافیه شما در کنترلرتون از روش زیر، در construct استفاده کنید:

در این مثال ما توی تابع construct مشخص می کنیم که یک استثنا در این کنترلر داریم متد middleware دو تا ورودی گرفته، که اولین ورودی مربوط به نام middleware هست که قرار ما از اون عبور کنیم و ورودی دوم متدهایی هست که مجوز عبور دارند، که می تونه بیش از یک متد باشه، توجه داشته باشید که باید نام متد وارد بشه نه URL [ کاری که من در ابتدا کرده بودم 😐 ].

حالا هربار showToGuest فراخوانی بشه بدون هیچ مشکلی از middleware عبور می کنه.

 

you_shall_not_pass_by_entroz-d5gjs4j

صف در لاراول

ارسال ایمیل انبوه با استفاده از صف در لاراول

یکی از کارهای این هفته من نوشتن ماژول ارسال ایمیل به ۳۰۰۰ تا ۵۰۰۰ کاربر می‌شد، برای همین تصمیم گرفتم که مراحل این کار ساده رو بصورت یک پست در وبلاگم قرار بدم.

برای حل مساله از queue لاراول استفاده کردم، حالا اگه سوال براتون پیش اومده صف چی هست با یک مثال براتون می گم:

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

Queue هم همین طور کار می کنه که شما یکسری وظایف بهش می دید و صف تک تک کارها رو انجام می ده.

برای تنظیم صفی که می خواهید استفاده کنید باید در فایل env در مقابل متغیر QUEUE_DRIVER یا در فایل config/queue.php مشخص کنید.
بطور پیش فرض لاراول از sync استفاده میکنه که یعنی بصورت همزمان کارها انجام می شه و صفی نیست و بیشتر برای سیستم های لوکال کاربرد داره و در حالت واقعی باید یکی از سیستم های زیر رو استفاده کنید.

 

پکیج مورد نیاز

نام صف

استفاده از دیتابیس بعنوان صف

DataBase

aws/aws-sdk-php 3.0

Amazon SQS

pda/pheanstalk ~3.0

Beanstalkd

iron-io/iron_mq ~2.0|~4.0

IronMQ

predis/predis 1.0

Redis

من از سرویس SQS آمازون استفاده کردم که یکی از بهترین سرویس‌های آمازون هست، ولی در نهایت همه این سیستم‌ها یک کار مشابه برای ما انجام می‌دهند.

در این بخش من فرض می‌کنم که لیست ایمیلی از کاربران به طول ۳۰۰۰ ایمیل آدرس از دیتابیس دریافت کردید و برای کم کردن خطاها و مشکلات باید این لیست به لیست های کوچکتر ۱۰۰ تایی تقسیم کرد تا به خطای time out بر نخوریم.

در فایل route.php برای تست کدهامون، آدرس زیر رو وارد می کنیم:

فایل کنترلر

در خط‌های ۱۵ تا ۱۸ آرایه خودمون رو ۱۰۰ تایی تقسیم کردیم هر چند راه های زیادی برای تقسیم آرایه هست که می تونید به stackoverflow مراجعه کنید و راه‌های پیشنهادی دیگه رو ببینید.
در خط ۲۳ متد queue رو استفاده کردیم، در ورودی اول فایل view رو مشخص میکنیم که در اینجا emails.template رو وارد کردیم و یک متغیر به نام text که در فایل view میتونیم به text$ از اون استفاده کنیم، در مرحله بعد باید فرستنده و گیرنده ایمیل مشخص بشه که در یک تابع closure قرار می‌دیم.
برای مشخص کردن فرستنده ایمیل از متد message->from$ استفاده کردیم و همون طور که مشخصه subject برای عنوان ایمیل و در نهایت من از bcc استفاده کردم جهت احترام به مشتری ها!

خب حالا وارد آدرس http://example.com/email/sendemail بشید با این کار ایمیل ها وارد صف می شن، ولی خب باید به لاراول دستور اجرای صف رو بدیم، یعنی تا اینجا ما سفارش پیتزا رو دادیم و نیاز داریم که دستور پخت پیتزا رو به آشپز بدیم، برای اجرای دستور شروع پخت چند کار میشه کرد.

راه ساده استفاده از دستور

این دستور یکبار همه کارهای صف رو انجام می ده.
برای گوش دادن همیشگی به صف می تونید از دستور زیر استفاده کنید:

خب این دو دستور رو هر بار توی ترمینال بزنید، که کار دلچسبی نیست پس بهتره روش بهتری استفاده کنید و می تونید از kernel و cronjob استفاده کنید، همه کارها بصورت اتوماتیک انجام بگیره.

در فایل app/Console/Kernel.php کد زیر رو وارد کنید

این دستور هر روز ساعت ۹:۴۵ دستور queue:listen رو اجرا می کنه.شما می‌تونید از cronjob هم استفاده کنید به این صورت که

Cron یک سرویس زمانبندی است که وظیفه اجرای روتین‌های خاصی را در زمان مشخص بر عهده دارد.

درباره cronjob بیشتر بدونید

برای راحتی کار می تونید از سرویس‌های ایمیلی مثل mailgun یا ‌mail chimp استفاده کنید که هر دو سرویس‌های رایگان در اختیار شما قرار میده و می‌تونید آمار خوبی از ایمیل‌هاتون داشته باشید که هر دو این سرویس‌ها توسط لاراول پشتیبانی میشه.

dependency-injection-in-laravel-15-638

ساخت منوی داینامیک در لاراول با کمک service provider

یکی از راه های ساخت منو داینامیک (یا منوی ناوبری) در لاراول استفاده از View composer در Service providerهاست.
آشنایی بیشتر با، به زبان فارسی Service Provider
سایت رسمی لاراول Service Provider

برای ساخت منو ما باید اول Service provider خودمون رو با php artisan بسازیم:

فایل جدید در مسیر app/Providers ساخته شده، که نمونه فایل ما به این شکله:

حالا در متد boot دستورات زیر رو وارد می‌کنیم:

در خط اول مشخص می‌کنیم که چه فایلی رو برای ارسال پارامتر انتخاب کردیم، در خط بعدی ما متغییر menu_items رو تعریف کردیم که فایل مدل Menu در اون قرار می گیره.

محتویات فایل header.blade.php ما به این صورت هست:

حالا برای اطمینان از لود شدن Service providerمون بهتره که دستور زیر رو توی ترمینال وارد کنیم:

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

با این کار هر بار که فایل header فراخوانی بشه به طور خودکار لاراول منوی سایتمون رو به فایل header.blade.php ارسال می‌کنه و دیگه نیازی نیست که توی کنترلر خودمون هر بار متغیری به header خودمون ارسال کنیم.

rapyd-header-image

بهترین پکیج لاراول برای برنامه نویس های تنبل!

اگر شما مایل به استفاده از (CRUD (Create/Read/Update/Delete در پروژه خودتون هستید، پکیج rapyd می تونه بهترین گزینه برای شما باشه.

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

نصب Rapyd از طریق Composer :

بعد از نصب باید شما در فایل config/app.php به providers این خط رو اضافه کنید:

 

 

برای لاراول ورژن پایین تر از۵٫۱

 

 

برای ساخت فایل های view پکیج دستور زیر را وارد کنید:

تا اینجا پکیج rapyd برای لاراول نصب شد، حالا بریم سراغ چند مثال از چگونگی استفاده از rapyd .

پکیج rapyd برای نمایش دیتاها از DataGrid استفاده می کنه که برای نمونه، کدهای زیر قرار گرفته:

نمونه فایل show-grid.blade.php برای نمایش اطلاعات:

در نهایت خروجی کدهای ما به این صورت میشه:

DataGrid-ouput

همان‌ طور که مشاهده کردید برای نمایش یک لیست از فایل ها کافیه سه خط به فایل view خودتون اضافه کنید و بقیه کارها توسط پکیج Rapyd انجام میشه.

جهت ایجاد، ویرایش و حذف اطلاعات هم می‌شه از DataEdit استفاده کرد:

 

فایل view جهت نمایش فرم ویرایش:

در نهایت نتیجه کار:

DataForm-output

این پست فقط جهت آشنایی مختصر با rapyd نوشته شده، برای دیدن تمامی متد های این پکیج شما می تونید به سایت دمو مراجعه و تمامی نمونه کدهای این پیکج رو مشاهده کنید.

سایت دمو پکیج : rapyd.com/rapyd-demo
گیت هاب : github.com/zofe/rapyd-laravel