<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های فرید فروزان</title>
        <link>https://virgool.io/feed/@faridfroozan</link>
        <description>PHP Developer</description>
        <language>fa</language>
        <pubDate>2026-04-14 22:12:57</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/38072/avatar/jPWUH8.png?height=120&amp;width=120</url>
            <title>فرید فروزان</title>
            <link>https://virgool.io/@faridfroozan</link>
        </image>

                    <item>
                <title>لاراول , Mysql , اطلاعات نمودار ها در Back-end</title>
                <link>https://virgool.io/@faridfroozan/%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-mysql-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D9%86%D9%85%D9%88%D8%AF%D8%A7%D8%B1-%D9%87%D8%A7-%D8%AF%D8%B1-back-end-bea27v57sam2</link>
                <description>یکی از مواردی که حتما در طی پروژه ها با اون روبرو می شین ارسال اطلاعات نمودار ها ( Charts ) برای کلاینت هست . حالا چه اندروید و ios ، چه وب . شما وظیفه ی تحلیل و گرفتن اطلاعات از دیتابیس رو دارید و اطلاعات رو به هر نحوی که دوست دارید میتونید سمت کلاینت بفرستید اما خب بهتره جوری باشه که پارس کردنش راحت باشه .نمودار اطلاعات به تفکیک ساعات شبانه روز ، روز های هفته و ...توی مثال زیر ، فکر کنین یه سیستم وبلاگ دهی دارید ، یا مثلا یه سایت خبری ، جدول مطالب رو بر اساس ساعت ایجاد شدن پست ها بررسی میکنیم تا ببینیم توی چه ساعت هایی نوشته های بیشتر یا کمتری ارسال شدن ( یا مثلا بازدید از پست ها رو بر اساس ساعات شبانه روز بررسی میکنیم و و و ... )  https://gist.github.com/faridfr/eb9e000efe417973b6a88b263c1e76de توی مثال بالا اونجایی که نوشته   date_format created_at, %H رو دقت کنید .این لینک رو باز کنید تا ببینید به همین شکل چقدر راحت میتونید دیتابیس رو بر اساس روز های هفته ، روز های ماه و سال و .... لیست کنید . تنها نکته ای که توی آنالیز داده ها برای (‌ روز های هفته ) وجود داره اینه که ترتیب داده ها توی خروجی به این شکله : (‌ یکشنبه ، دوشنبه ،‌ سه شنبه ، چهارشنبه ،‌ پنج شنبه ، جمعه ، شنبه ) یعنی یکشنبه اول و شنبه آخر هست . که با یک order by field 6,0,1,2,3,4,5  آخر کوئریتون درست خواهد شد . سعی میکنیم همیشه جواب هایی که به کلاینت میدیم مثل این مثال بالامون باشه . محورهای x و y رو جدا و حتی در کنار هم بصورت xy برای کلاینت میفرستیم تا استفاده کنه . سعی میکنیم همه ی خروجی هامون برای نمودار ها این شکلی باشه نمودار تحلیلی برای سی روز گذشتهدر برخی موارد شما مجبور هستید داده های روز های مختلف رو از دیتابیس دونه دونه بگیرید و روشون کارها و محاسباتی انجام بدید و برای کلاینت بفرستید . خب طبیعتا یکمی فشارش زیاده پس پیشنهاد میکنم جواب همچین نموداری رو cache کنید . ما توی این مثال سفارش های سی روز گذشته رو درآوردیم و روی محور X میخوایم روزهای شمسی رو نشون بدیم .  https://gist.github.com/faridfr/a4f40bba52913219408397360c88bdd9 توی این مثال سی روز گذشته رو به شمسی به کلاینت تحویل میدیم ( مثلا 05-02-1398 ) این کار با کمک کتابخونه morilog لاراول انجام میشه . و همونطور که توی کد کامنت نوشتم میتونید از whereDate هم استفاده کنید . امیدوارم کمکی کرده باشم .</description>
                <category>فرید فروزان</category>
                <author>فرید فروزان</author>
                <pubDate>Thu, 25 Apr 2019 16:49:56 +0430</pubDate>
            </item>
                    <item>
                <title>فونت فارسی و تقویم شمسی در Trello</title>
                <link>https://virgool.io/@faridfroozan/%D8%AA%D8%B1%D9%84%D9%88%DB%8C-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-cgcpr12attad</link>
                <description>ممکنه شما برای مدیریت تیم و پروژه از سیستم Trello.com استفاده کنید . توی این مطلب نمیخوایم سیستم ها رو معرفی کنیم ، میدونم چندین و چند سیستم مدیریت تیم و پروژه ایرانی هم هست :)‌ ولی خب ترلو امکاناتش خوبه و به خیلی از سیستم های دیگه وصل میشه و خیلی از نیاز هارو برطرف میکنه و ممکنه خیلی ها ازش استفاده کنن . فقط دو تا مشکل کوچیک برای ما داره اونم راست چین نبودن و فونت بد جمله های فارسی و همینطور نبود تقویم شمسی هست .یه راه حل ساده برای برطرف کردن این چالش رو براتون مینویسم امیدوارم کمکی بکنه . این راه حل برای مرورگر chrome هست ولی خب اگر از مرورگر دیگه ای هم استفاده میکنین میتونین از این راهنما کمک بگیرید . اول یه اکستنشن برای مرورگر نصب می کنیم که بتونیم برای هر سایت یه CSS مخصوص بنویسیم . روی این لینک کلیک کنید و این افزونه رو روی مرورگرتون نصب کنید . https://chrome.google.com/webstore/detail/user-css/okpjlejfhacmgjkmknjhadmkdbcldfcb?hl=en بعد که نصب شد روی آیکونش بالا سمت راست مرورگرتون کلیک کنید تا یه پنجره ظاهر بشه برای نوشتن کد CSS . اول برید داخل خود سایت trello توی داشبوردتون . بعد توی همون محیط این کد زیر رو کپی کنید : https://gist.github.com/faridfr/8718a94ddc3b8d6e3ed599ce56ded9f9 قسمتی که نوشته font-family: iranYekan; میتونید هر فونتی که توی کامپیوترتون دارید بنویسید .و تمام :) نتیجه به صورت زیر خواهد بود ... فونت خوب و راست چین برای ترلو : حالا که دیگه به این افزونه نیازی ندارید میتونید hideش کنین تا اون بالا نباشه :و اما برای نمایش تاریخ ها بصورت شمسی :اول این افزونه رو روی کروم نصب کنین : https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo/related?hl=en بعدش وارد این صفحه بشین و روی install کلیک کنید : http://userscripts-mirror.org/scripts/show/173583 حالا اگر وارد داشبوردتون بشید و رفرش کنید ،‌ میبینید تاریخ ها بصورت شمسی نمایش داده میشن .امیدوارم مفید بوده باشه </description>
                <category>فرید فروزان</category>
                <author>فرید فروزان</author>
                <pubDate>Sun, 14 Apr 2019 23:32:15 +0430</pubDate>
            </item>
                    <item>
                <title>لاراول ، لاگ ریکوئست ها</title>
                <link>https://virgool.io/laravel-community/%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D9%84%D8%A7%DA%AF-%D8%B1%DB%8C%DA%A9%D9%88%D8%A6%D8%B3%D8%AA-%D9%87%D8%A7-ipmec6snbe3j</link>
                <description>بعضی کارها هست که ممکنه اول پروژه بهش فکر نکنید و بعدا یه روزی خیلی شدید نیازتون بشه و با خودتون بگید کاش از اول این کارارو میکردم . مثل Backup گرفتن . که تا وقتی که یهو دیتاتون رو از دست ندید قدرش رو نمیدونید ! ( در مورد بک آپ بعدا مفصل صحبت می کنیم ) . لاگ ریکوئست ها هم همینطور . چرا باید ریکوئست ها رو لاگ کنیم ؟در یک پروژه که خط تولید یک کارخونه توسط وب اپ مدیریت می شد ، یه سری صفحه بودن که مهندسین و اپراتورهای بخش برنامه ریزی تولید ، قطعات مختلف یک محصول رو توی سیستم تعریف میکردن . مثلا یک میز شامل تعدادی board , layer , profile , part و ... میشه . که هر کدوم باید ازش کلی اطلاعات وارد کنن مثلا نوع mdf .. مسیری که باید توی کارخونه طی کنه ، نقشه های برش ، تامین کننده و و و ....خب . مهندس معمار یا اپراتور می نشست پشت سیستم و مثلا برای یک میز ساده حدود 10-20 دقیقه با دقت و حوصله تمام آیتم ها رو وارد میکرد . بعد که save رو میزد ، یهو بنا به هر دلیلی ( که بالاخره جلوی اون هارو هم تا جایی که میشه باید گرفت ) دیتا از دست میرفت و ذخیره نمیشد .... !!!! آقا این چه وضعشه . آقا من 20 دقیقه وقت گذاشتم ... و و و ....در مورد بعدی مثلا مدیریت میاد میگه که فلان آیتم یا فلان محصول رو کی وارد سیستم کرده ؟ چه زمانی ؟ مرورگرش چی بوده آی پیش چی بوده و و و ....اون موقع با خودتون میگید چه خوب میشد یه سیستم لاگ داشتیم که همه ریکوئست ها رو با اطلاعات فرستنده نگه می داشت و راحت میشد رفت خوندش ( مثلا یک فایل حجیم یا قاطی پاتی توی سرور نمیبود ) و دسترسی بهش آسون میبود . اصلا یه بخش گرافیکی خوشگل توی سایت میبود که لاگ ها رو نشون میداد .خب . حالا شاید قدر این قضیه بیشتر دونسته بشه . اینکار خیلی سخت نیست و میتونید مثلا از پکیج زیر استفاده کنید : https://github.com/spatie/laravel-http-logger ولی من توی این مورد ترجیح دادم یک روش خودم داشته باشم و پیادش کنم . یه table ساختم با مشخصات زیر : https://gist.github.com/faridfr/d4e73760c7fd94ff5f7940e7a870e00b و از اونور توی controller اصلی که همه ازش ارث بری میکنن این قطعه کد رو نوشتم (‌ روش های جالب تر و بهتری هم هست مثل نوشتن middleware ) https://gist.github.com/faridfr/759b9952feb97adc48cf2038b546d862 نکته های کد بالا :من روشی که آی دی کاربر رو بدست میاوردم رو از قطعه کد حذف کردم. شما بسته به روش authentication‌ سیستمتون آی دی کاربر رو توی متغیر مربوطه ذخیره کنید .برای تشخیص agent  ( مثلا نوع مرورگر و موبایل و ... ) از کتابخونه ی jenssegers/agent استفاده کردم و برای خودم یه helper function نوشتم که همه جا بتونم ازش استفاده کنم . خروجی این تابع هم یه رشته هست که نمونش رو توی عکس زیر که همون تیبل logs هست میبینید .من این شرط رو گذاشتم که اگر ریکوئست کلاینت GET نبود ذخیره کن . اگر دوست دارید میتونید این شرط رو بردارید . اگر مثل ما کل سیستمون API based هست این سایت برای خوشگل کردن ورودی های json اپراتور ها ممکنه به دردتون بخوره :  https://jsonformatter.org نیاز ما نبوده که فعلا خروجی api رو ذخیره کنیم اما شما میتونین این کار رو انجام بدید .نمونه لاگ ذخیره شده . به ستون های agent و input دقت کنین .در نهایت بهترین روش رو خودتون سریع میتونید پیدا کنید و از بهترین کتابخونه ها واسه این کار استفاده کنید اما پیشنهاد من اینه که از این کار دریغ نکنین :) موفق باشین</description>
                <category>فرید فروزان</category>
                <author>فرید فروزان</author>
                <pubDate>Tue, 09 Apr 2019 00:11:48 +0430</pubDate>
            </item>
                    <item>
                <title>وبسایت ، API و دیتابیس چند زبانه در لاراول (2)</title>
                <link>https://virgool.io/laravel-community/%D9%88%D8%A8%D8%B3%D8%A7%DB%8C%D8%AA-api-%D9%88-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86%D9%87-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-2-rskeduu0z6c9</link>
                <description>لطفا اول قسمت قبل رو بخونید : https://virgool.io/@faridfroozan/%D9%88%D8%A8%D8%B3%D8%A7%DB%8C%D8%AA-api-%D9%88-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86%D9%87-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-1-kfbbpjuihkmr هدف ما اینه که بتونیم سایتی داشته باشیم که هم متن هایی که ما از سمت سرور میفرستیم چند زبانه باشه ( با کمک laravel localization ) و هم محتوایی که کاربر میفرسته به چند زبان مختلف باشه . مثلا موقعی که اسم محصول رو میخواد تعریف کنه بتونه فارسی و انگلیسی و آلمانی و ... رو هم وارد کنه . خب شاید راه اولی که به ذهنتون برسه این باشه که یک تیبل دیکشنری داشته باشیم که به ازاء هر زبانی که میخوایم توی برنامه داشته باشیم کلمه های مختلف رو وارد کنیم . اما خب اگر سیستمتون بزرگ باشه و بخاطر هر اسم محصول ، شهر ، کشور ، توضیحات محصولات و ... بخواین به این table رجوع کنین باید فاتحه سرور رو خوند .راه حل بعدی که ممکنه به ذهن برسه اضافه کردن column به تیبل هامون هست . مثلا name_persian و name_english و ... اما خب توی چند تا تیبل این کارو کنیم ؟ اگر بعدا یه زبان به برنامه اضافه شد چی ؟ ما شاید برناممون 70-80 ( چه بسا بیشتر ) جدول داشته باشه و 90 درصدشون نیاز به این چند زبانی داشته باشن .  بعد اصن اومدیم و این کارو کردیم . موقع خوندن از دیتابیس وقتی میخواین داده هارو بگیرین چجوری get میکنین و اینکه بدونین کدوم ستون رو الان باید بخونین شاید یکمی سخت باشه ... .آقا این همه حرف زدیم که این پکیج رو از جامعه ی با عشق و دوست داشتنی spatie  معرفی کنیم . https://github.com/spatie/laravel-translatable آموزش چند زبانه کردن در لاراول - بخش دوم - ذخیره :راه حل spatie به این صورته که توی همون ستون مثلا اسم محصول یا آدرس یا ... یه json ذخیره میکنید از معنی های اون کلمه در زبان های مختلف . مثلا این میتونه اسم خیابون ها باشه توی جدول آدرس ها :به ستون name توجه کنید .وقتی که ستون name رو get میزنین خودش بر اساس locale برنامه که توی قسمت قبل اونو set کردیم همون ترجمه ای رو میده که لازم دارید . کلی هم متد خفن داره برای وقتایی که همه ی ترجمه های موجود رو میخواین یا ... .  وقتی هم مثلا زبان برنامه روی آلمانی ست شده باشه و ترجمه ی آلمانی موجود نباشه ، خالی برنمیگردونه .. خودش زبان دیفالتی که توی config گفتین ( مثلا فارسی ) رو بر میگردونه و اینا همش قابل تنظیمه . حقش نیست حداقل یه star به این پکیج بدید ؟ خداوکیلی !حالا چیکار کنیم ؟  پکیج رو نصب کنید و لذت ببرید :) پیشنهاد من : یه تیبل درست کنید برای زبان هایی که برنامتون داره . توی محیط مدیریتتون هم یکار کنین بتونین زبان ها رو اضافه و کم کنید . بعد توی view وقتی که میخواین input هارو بسازید توی حلقه به ازاء هر زبانی که توی برنامتون هست یه input بزارید مثلا ( اسم محصول به فارسی ) ( اسم محصول به آلمانی )حالا کافیه این مقادیر رو بصورت آرایه برای back-end بفرستید . توی back-end هم برای validation باید بگیم حتما ارایه طور باشه و اگر خواستین میتونین داخل هر آیتمشو هم validate کنین . موقع create کردن هم خیلی راحت همون دیتای valid شدتون رو بفرستید و اونم گیر نمیده اگر مطابق داکیومنت جلو رفته باشید .مثلا اینو ببینید :\App\Setting::create([
    &#039;key&#039; =&gt; &#039;address&#039; ,
    &#039;value&#039; =&gt;  [
        &#039;fa&#039; =&gt; &#039;پارک علم و فناوری ، مرکز رشد&#039;,
        &#039;en&#039; =&gt; &#039;Science and technology park&#039;
    ]
]);خب . بازم در این زمینه کمکی اگر از دستم بربیاد انجام میدم . منتظر نظراتتون هستم .</description>
                <category>فرید فروزان</category>
                <author>فرید فروزان</author>
                <pubDate>Sat, 06 Apr 2019 01:35:27 +0430</pubDate>
            </item>
                    <item>
                <title>وبسایت ، API و دیتابیس چند زبانه در لاراول (1)</title>
                <link>https://virgool.io/laravel-community/%D9%88%D8%A8%D8%B3%D8%A7%DB%8C%D8%AA-api-%D9%88-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86%D9%87-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-1-kfbbpjuihkmr</link>
                <description>قراره در مورد چندزبانه کردن یک وبسایت و api پروژه ی تحت لاراول صحبت کنیم . شامل ترجمه ی جمله های خود وبسایت ما هست . مثلا پیغام ( تغییرات ذخیره شد ) یا ( Changes saved ) و همچنین دیتابیس چند زبانه برای آمادگی دریافت محتوای چند زبانه از کاربر . مثلا توی فروشگاه اینترنتی مدیر بتونه محصول رو به 3-4 زبان وارد سیستم کنه ( و بعدا حتی یه زبان دیگه هم بهش اضافه کنه )چند زبانه یعنی حتی بیشتر از فارسی و انگلیسی ... بصورت داینامیک وسط پروژه بتونیم یک زبان به برنامه اضافه کنیمچیزی مثل تیبل دیکشنری داخل دیتابیس نمیسازیم و کارای عجیب و پیچیده و سنگین نمیکنیمستون های مختلف هم قرار نیست بسازیم برای نگه داشتن معانی کلمات در زبان های مختلفآموزش چند زبانه کردن در لاراول - بخش اول - نمایش :اول از همه لازمه که Route هاتون رو آماده ی پذیرش Language بکنین . که کاربر یجوری بتونه به شما بفهمونه که میخواد با چه زبانی با شما صحبت کنه . آموزش رو برحسب ایجاد api جلو میبریم 90 درصد موارد web رو هم شامل میشه . خب اول از همه توی api.php یه گروه بسازید و اجازه بدید زبان رو بصورت پارامتر برای شما ارسال کنن . مثلا در این کد  {lang?} رو ببینیدRoute::prefix(&#039;{lang?}&#039;)-&gt;group(function () {
    Route::get(&#039;awake&#039;, &#039;ApiController@awake&#039;);
});از اون طرف توی construct فایل App\Http\Controllers که کنترلر هاتون ازش ارث بری میکنن کد زیر رو بنویسید تا پارامتری که کاربر توی Route برای شما ارسال کرده به عنوان زبان اصلی برنامه انتخاب بشه ( بجز این ، راه های دیگه ای هم تا اینجای کار توی اینترنت هست اگر سرچ کنید )public function __construct(Request $request)
{
    \App::setLocale($request-&gt;route(&#039;lang&#039;));
}حالا مثلا اگر بخوایم به کاربر یه سری جمله نشون بدیم میدونیم با چه زبانی باید باهاش صجبت کنیم .کلمات ، جمله ها و هشدار های آماده و از قبل تعریف شده . توی فولدر resource/lang پوشه های مختلف هست به اسم خلاصه ی زبان ها . مثلا fa , en , ... فولدر fa رو باز کنید و فایل messages.php رو بسازید یا باز کنید . یه سری جمله و هشدار مثل من آماده کنید    https://gist.github.com/faridfr/4d7169923788652cf0c43a9e804bd9ab حالا این وسط به  time_activationcode هم نگاه کنید و ببینید که میشه برای ترجمه ها مقدار هم فرستاد و حرفه ای ترشون کرد . اگر لبخند رو لبتونه روی این لینک کلیک کنید تا بیشتر در موردش بدونید .خب حالا واسه اینکه تا اینجای کار رو تست کنیم مثلا بریم توی همون ApiController که بالاتر توی Route صداش زدیم . متد awake رو اینطور بنویسید :public function awake()
{
    return __(&#039;messages.im_awake&#039;);
}حالا یبار سایتتون رو با پیشوند fa و یبار هم با پیشوند en بیارید بالا . مثلا یبار XXX.com/api/fa/awake یبار هم XXX.com/api/en/awakeبرای اینکه بتونید داخل فایل message.php توی فولدر en ترجمه های انگلیسی هم بزارید گذاشتمشون اینجا :https://gist.github.com/faridfr/2592316faca3a16da4f4ac3ab10dfa7dحالا شما میتونید جمله هاتون رو به زبان های مختلف به کاربر نشون بدید . اما کاربر چجوری به زبان های مختلف برای شما داده بفرسته ؟مثلا اگر توی فروشگاه شما موقع تعریف یک محصول اسم اون محصول به زبان فارسی انگلیسی و آلمانی لازم داشتیم چجوری توی دیتابیس ذخیرش کنیم ؟ بهش فکر کنید . و نکته های اول پست رو با دقت بخونید . راه حل شما چیه ؟توی پست بعد راه حل ساده ای رو مینویسم ...ادامه ی این مطلب رو اینجا بخونید : https://virgool.io/@faridfroozan/%D9%88%D8%A8%D8%B3%D8%A7%DB%8C%D8%AA-api-%D9%88-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%DA%86%D9%86%D8%AF-%D8%B2%D8%A8%D8%A7%D9%86%D9%87-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-2-rskeduu0z6c9 </description>
                <category>فرید فروزان</category>
                <author>فرید فروزان</author>
                <pubDate>Fri, 05 Apr 2019 03:40:47 +0430</pubDate>
            </item>
                    <item>
                <title>لاراول Pdf ، کاراکتر فارسی دغدغه نیست !</title>
                <link>https://virgool.io/laravel-community/%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-pdf-%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C-%D8%AF%D8%BA%D8%AF%D8%BA%D9%87-%D9%86%DB%8C%D8%B3%D8%AA-cuw16ywt90n8</link>
                <description>چند وقت پیش طی یک پروژه میخواستم از لاراول خروجی pdf تهیه کنم که یه سری ویژگی ها داشته باشه :حتما کاراکتر های فارسی رو ساپورت کنه .امکاناتی مثل شماره صفحه page number ،‌ بریدن صفحه و رفتن به صفحه بعد page break و ... .پیاده سازی ظاهر اون سخت نباشه . راحت با Html , CSS بشه اوکیش کرد .ابعاد صفحه ی pdf و orientation اون قابل تنظیم باشه ( مثلا برای بارکد های محصولات و قطعات )و بتونم توش از blade استفاده کنم و بهش دیتا پاس بدم و ... .اولین پکیجی که بهش رسیدم barryvdh/laravel-dompdf بود که خب نویسنده ی بنام و قوی ای داره اما بعد از استفاده از اون به مشکل کاراکتر های فارسی و ... خوردم که در کل بهتون پیشنهاد نمیکنم . پیشنهاد من :بنظر من بهترین پکیج میتونه niklasravnsborg/laravel-pdf باشه که به فکر کاراکترهای پیچیده فارسی و عربی و ... هم بوده و امکاناتی که بالا گفتم رو هم داره .  https://github.com/niklasravnsborg/laravel-pdf این پکیج با کمک mpdf ساخته شده . بعضی از attribute ها و دستورات css رو ممکنه نتونه بفهمه و توی خروجیتون به مشکل بخورید پس راهنمای اون رو هم یه مطالعه داشته باشید بد نیست . ولی بطور خلاصه بخوام بگم بهتره از فریمورک هایی مثل bootstrap و ... استفاده نکنید . پکیج رو که نصب کنید طبق راهنما باید توی فایل کانفیگش آدرس فونت های فارسیتون رو بدید و به اون ها اسم بدید . یعنی کاری به css و فونت های اون نداره و باید توی کانفیگ هم اسم و هم آدرس فونت هاتون رو بدید . به عنوان مثال :return [
   &#039;mode&#039;                  =&gt; &#039;utf-8&#039;,
   &#039;format&#039;                =&gt; &#039;A4&#039;,
   &#039;author&#039;                =&gt; &#039;Farid&#039;,
   &#039;subject&#039;               =&gt; &#039;&#039;,
   &#039;keywords&#039;              =&gt; &#039;&#039;,
   &#039;creator&#039;               =&gt; &#039;Farid&#039;,
   &#039;display_mode&#039;          =&gt; &#039;fullpage&#039;,
   &#039;tempDir&#039;               =&gt; base_path(&#039;../temp/&#039;),
   &#039;font_path&#039; =&gt; base_path(&#039;public/fonts/&#039;),
   &#039;font_data&#039; =&gt; [
      &#039;fa&#039; =&gt; [
         &#039;R&#039;  =&gt; &#039;fonts/ttf/IRANSansWeb(FaNum).ttf&#039;,
         &#039;B&#039;  =&gt; &#039;fonts/ttf/IRANSansWeb(FaNum)_Bold.ttf&#039;,
         &#039;useOTL&#039; =&gt; 0xFF,
         &#039;useKashida&#039; =&gt; 75,
      ],
      &#039;en&#039; =&gt; [
         &#039;R&#039;  =&gt; &#039;Gothic/Century Gothic.ttf&#039;,
         &#039;B&#039;  =&gt; &#039;Gothic/GOTHICB.ttf&#039;,
      ]
   ]
];طبق کانفیگ بالا توی فایل های view blade که برای خروجی گرفتن میسازید باید توی cssتون اسم فونت رو &#x27;fa&#x27; یا &#x27;en&#x27; بزارید تا مشکلی پیش نیاد .خیلی راحت میتونید برای همه ی صفحات داخل pdf هدر و فوتر تنظیم کنید . برای اینکار تگ های خاصی درست شده که زیر بهش اشاره کردم :&lt;style&gt;
    @page {
        header: page-header;
        footer: page-footer;
    }
&lt;/style&gt;
// for header :
&lt;htmlpageheader name=&quot;page-header&quot;&gt;
    This is Header
&lt;/htmlpageheader&gt;برخی امکانات :برای نمایش شماره ی صفحه ای که داخلش هستید میتونید از {PAGENO} استفاده کنید و تعداد کل صفحاتتون {nb} هست . برای کات کردن صفحه و رفتن به صفحه ی بعد میتونید از تگ &lt;pagebreak&gt;&lt;/pagebreak&gt; استفاده کنید . نحوه ی فراخوانی توی controller یا job ها هم خیلی سادست یه مثالی میزنم که اکثر نیاز ها رو شامل بشه :use niklasravnsborg\LaravelPdf\PdfWrapper;$pdf = new PdfWrapper();
$pdf-&gt;loadView(&#039;YOUR_BLADE_FILE&#039;,compact(&#039;YOUR_DATA&#039;),[],[
    &#039;mode&#039; =&gt; &#039;utf-8&#039;, &#039;format&#039; =&gt; [WIDTH,HEIGHT]
])-&gt;save(&#039;ADDRESS/FILE_NAME.pdf&#039;);اگر توی job خواستید خروجی pdf بگیرید و به مشکل خوردید پست قبلی من رو بخونید : https://virgool.io/@faridfroozan/%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-queue-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D8%B1%D9%88-%D9%85%D8%B9%D8%B7%D9%84-%D9%86%DA%A9%D9%86-tg2ubzbzvgye امیدوارم دیگه دغدغه ی کاراکتر های فارسی توی خروجی هاتون نداشته باشید :)</description>
                <category>فرید فروزان</category>
                <author>فرید فروزان</author>
                <pubDate>Mon, 01 Apr 2019 18:41:49 +0430</pubDate>
            </item>
                    <item>
                <title>لاراول queue ، کاربر رو معطل نکن !</title>
                <link>https://virgool.io/laravel-community/%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-queue-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D8%B1%D9%88-%D9%85%D8%B9%D8%B7%D9%84-%D9%86%DA%A9%D9%86-tg2ubzbzvgye</link>
                <description>ممکنه بعضی وقتا توی پروژه هاتون با دیتای زیاد و سنگینی سروکار داشته باشید که قراره محاسباتی روشون انجام بشه ، توی دیتابیس ذخیره بشن یا توی فایل save بشن . اما خب اگر کلاینت درخواست بده و شما بلافاصله مشغول انجام این کار بشید ممکنه کارتون توی back-end خیلی طول بکشه و کاربر خطای 504 Gateway Timeout بگیره . یا حتی ممکنه بخواین یه کار ساده و سبک رو بعدا انجام بدید ( مثلا ارسال یک ایمیل یا sms به مشتری در روز و ساعت خاصی ) ... ولی خب مثال و بحث ما یه همچین چیزی نخواهد بود و بیشتر تمرکزمون توی این پست روی دیتای سنگین هست .راه حل چیه ؟یکی از امکانات خوب لاراول ، Queues هست که شما رو برای سپردن کارها به بکگراند راحت میکنه .اگر داکیومنت خود لاراول رو بخونین میبینین که چقدر امکانات داره برای timeout , failure , ignore , retry و و و ... من در ادامه فرض میکنم که حداقل 3-4 دقیقه ای رو توی این صفحه گذروندید و حداقل تیتر هاشو خوندید  :)یکی از کارهایی که نوشته و معمولا از دست دوستان در میره تنظیم کردن cron job سرور هست . در نظر داشته باشید که شما اموری رو به &quot; صف کارها &quot; میسپارین و در نهایت با مطالعه و پیاده سازی بخش Scheduling به سرور میگید که مثلا هر شب یا هر 5 دقیقه لیست کارهای من رو چک کن و اونایی که باید رو انجام بده .اما !من قصدم اینه که وقتی کلاینت درخواستش رو میده سریع بهش بگم OK برو خیالت راحت ... و از طرفی بلافاصله توی بکگراند کارش رو برم انجام بدم و در نهایت مثلا بهش sms بدم و بگم برو نتیجشو چک کن مثلا ! نمیخوام خودمو درگیر scheduling بکنم ( بستگی به کارتون داره بالاتر گفتم که هدف ما انجام امور سنگین هست نه زمان بندی و تقسیم بندی ) . پس باید چه کنم ؟انجام کارهای سنگین در بکگراند لاراول :طبق داکیومنت دیدین که برای اینکه queue رو به حالت آماده باش برای اجرا در بیارین از dispatch استفاده میکنین و اگر میخواین که بلافاصله اجرا بشه از  dispatchNow استفاده میکنین که کار رو بصورت Synchronous انجام میده . طبق تجربه ، استفاده از پکیج barryvdh/laravel-async-queue رو شدیدا بهتون پیشنهاد میکنم از خیلی چیزا خلاصتون میکنه . توضیحاتش گویای همه چیز هست : Just like the &#x27;sync&#x27; driver, this is not a real queue driver. It is always fired immediatly. The only difference is that the closure is sent to the background without waiting for the response. This package is more usable as an alternative for running incidental tasks in the background, without setting up a &#x27;real&#x27; queue driver.  https://github.com/barryvdh/laravel-async-queue نحوه فراخوانی :bigJobClassHere::dispatch([
    &#039;data&#039; =&gt; $data,
    &#039;username&#039; =&gt; auth()-&gt;user()-&gt;username,
])-&gt;onConnection(&#039;async&#039;);مشکل کار با فایل در Laravel Queue :ممکنه شما هم مثل من توی این کارهای سنگین بجز ارسال sms و کار با دیتابیس و ... بخواین با فایل هم کار کنین !و هر چقدر کدی که توی controller ها به خوبی کار میکنه ( مثلا pdf ذخیره میشه یا Excelتون save میشه و ... ) رو داخل این job میندازین میبینین که نه ... انگار نه انگار ... ! اگر یکمی با کدتون ور رفته باشین مثلا شاید به این نتیجه برسین که implements ShouldQueue رو برمیدارم و حل میشه در صورتی که غافل از این هستید که کار ، دیگه توی بکگراند انجام نمیشه . اما راه حل چیه ؟بعد از اینکه مطمئن شدین مشکل شما از سطح دسترسی ( permission ) فولدر مقصد نیست ، کافیه آدرس فایل هاتون رو از root سرور بدین . مثلا اگر قبلا میگفتین uploads حالا بگید : /home/admin/domains/XXXXX.ir/public/uploadsمشکل هنگ کردن دیتابیس در Transaction های سنگین :ممکنه برای تست ( یا در حین کار با سیستم ) سرور رو درگیر یک Transaction سنگین بکنید بطوری که باقی کوئری ها دیرتر جوابشون بیاد و مثلا اگر از phpmyadmin ، mysql استفاده میکنید .. جدول ها باز نشن .. مقادیر آپدیت نشن و ... سوال : چجوری لغوش کنم ؟ج : وارد phpmyadmin بشین ( من این رو مثال میزنم چون میدونم اکثریت رو شامل میشه ) .. بخش status رو از همون صفحه ی اول انتخاب کنید . وارد processes بشین و پروسس مربوطه رو kill کنید .در نهایت بعد از این همه پر حرفی امیدوارم این پست کمکی کرده باشه . من نمیخواستم همون آموزشی که توی داکیومنت لاراول هست رو اینجا مطرح کنم . هدف صرفا معرفی کتابخونه ی بالا و حل مشکل ذخیره فایل ها بود . متشکرم .</description>
                <category>فرید فروزان</category>
                <author>فرید فروزان</author>
                <pubDate>Mon, 01 Apr 2019 04:57:56 +0430</pubDate>
            </item>
                    <item>
                <title>بازگشت به وبلاگ نویسی با ویرگول</title>
                <link>https://virgool.io/@faridfroozan/%D8%A8%D8%A7%D8%B2%DA%AF%D8%B4%D8%AA-%D8%A8%D9%87-%D9%88%D8%A8%D9%84%D8%A7%DA%AF-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A8%D8%A7-%D9%88%DB%8C%D8%B1%DA%AF%D9%88%D9%84-nswd4vncsuyo</link>
                <description>سلام به همه ی عزیزانی که این پست رو میخونن . من فرید فروزان هستم ، فارغ التحصیل رشته ی مهندسی نرم افزار و شاغل تحت عنوان لیدر تیم نرم افزاری و توسعه دهنده سمت سرور در یک شرکت واقع در تهران . تخصصم PHP فریمورک Laravel و کمی کنجکاو در رابطه با فریمورک های جدید Front-Endحدودا اوایل دبیرستان وقتی وارد دنیای برنامه نویسی وب شدم وبلاگ نویسی رو کنار گذاشتم و حالا بعد از 8 ، 9 سال حس میکنم حرف هایی برای گفتن دارم . البته بسته شدن وبلاگ هام در اون زمان از دیگر دلایل ترک وبلاگ نویسی بود :)اول قصد داشتم وبسایت شخصی خودم با یکسری امکانات رو پیاده کنم اما از وقتی که با ویرگول آشنا شدم فکر میکنم اصلا نیازی به این کار نیست و کاملا میتونم روش حساب کنم . البته نمیدونم که ویرگول API داره یا نه ولی حتما راهی برای نشر با کیفیت مطالبی که اینجا مینویسم داخل وبسایت های دیگه هست .توی این 8 ، 9 سال اتفاقات خیلی خیلی زیاد و هیجان انگیزی برای من افتاده که به همون اندازه هیجان دارم برای به اشتراک گذاشتنشون با شما . تجربه های استارتاپی و بیزنس مافیایی طور! اون ها در ایران ، مدیریت یک شرکت کوچیک و پیاده سازی 3 اپ نسبتا بزرگ و کاربردی ، تجربه های نمایشگاه ها و در نهایت راهی که منجر به استخدام با شرایط ایده آل خودم شد . امیدوارم که بتونم بطور منظم و با برنامه فعالیت داشته باشم و تجربه های فنی و غیر فنی ام رو به اشتراک بزارم و از همه مهم تر ، توی ویرگول دوستانی پیدا کنم که بیش از پیش من رو به وبلاگ نویسی ترغیب کنن .خوشحال میشم اینجا با دیگر دوستانی که در یک حوزه فعالیت داریم آشنا بشم تا ارتباط موثرتری برقرار کنیم .و گیت هاب : https://github.com/faridfr فعلا تا پست بعدی که ایشالا به هفته ی بعد نکشه :)</description>
                <category>فرید فروزان</category>
                <author>فرید فروزان</author>
                <pubDate>Sun, 31 Mar 2019 03:44:00 +0430</pubDate>
            </item>
            </channel>
</rss>