<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های محمد رستمی</title>
        <link>https://virgool.io/feed/@mmdrsdev</link>
        <description>برنامه نویس بکند لاراول و علاقه مند به اوپن سورس</description>
        <language>fa</language>
        <pubDate>2026-04-15 01:23:21</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2645224/avatar/8VkMqA.jpg?height=120&amp;width=120</url>
            <title>محمد رستمی</title>
            <link>https://virgool.io/@mmdrsdev</link>
        </image>

                    <item>
                <title>یک نگاه به چیزی  که توی لاراول 11 اومده</title>
                <link>https://virgool.io/avasam-laravel-edu/laravel11-wnezdy73v81z</link>
                <description>لاراول 11‏ پوشه بندی ساده شدهتعداد فایل هایی که نصب میشن 69 تا کمتر شدناینا چیزایه که توی بتا بود ممکنه عوض بشن ولی در حال حاضر این چیزیه که انتظار داریم باشه :  کنترلر ها به صورت پیشفرض از چیزی extend نمیشنفایل های config حذف شدندیگه پوشه middleware نداریمدر حال حاضر لاراول 9 تا middleware داره و بیشترشونم کاستومایز نمیکنید ولی اگه احیانا خواستید کاستومایز کنید به پوشه App/ServiceProvider منتقل شده . برای مثال :public function boot(): void{
        EncryptCookies::except([&#039;some_cookie&#039;]);
}دیگه Http/Kernel وجود ندارهبیشتر کارهایی که توی kernel میکردید رو الان میتونید توی Bootstrap/App انجام بدیدreturn Application::configure()
        -&gt;withProviders()
    - ›withRouting(
        web: __DIR__ . &#039;/../routes/web.php&#039;
        commands: __DIR__ . &#039;/../routes/console.php&#039;,
    )
    -&gt;withMiddleware(function (Middleware Smiddleware) {
    $middleware-&gt;web(append: LaraconMiddleware::class):
    })‏ Model cast ها تغییر کردندالان دیگه Model cast ها به عنوان یک متد تعریف میشن نه یک پراپرتی وقتی که به عنوان متد تعریف میشن ما میتونیم کار های دیگه ای هم بکنیم مثلا متد های دیگه رو مستقیما فراخوانی کنیم . اینجا یه مثال از لاراول 11 آوردیم : protected function casts(): array
{
    return [
        &#039;email_verified_at&#039; =&gt; &#039;datetime&#039;,
        &#039;password&#039; =&gt; &#039;hashed&#039;,
        &#039;options&#039;=› AsEnumCollection::of(UserOption::class),
    ];
}تغییرات configلاراول کلی فایل کانفیگ داره و لاراول 11 همشونو پاک کرده  و از اون طرف env. بزرگتر شده و همه config هایی که نیازه ست کنید رو داره برا همین  کامند جدید config:publish هم اومده پس شما میتونید هر کانفیگی که بخواید رو برگردونید . با این حال بازم هر آپشنی که نمیخواید کاستومایز کنید  رو میتونید حذف کنیدمتد جدید onceتوی لاراول 11  helper جدید once اومده که براتون تضمین میکنه همیشه یک مقدار مشابه رو ازش بگیرید بی توجه به این که چندبار فراخوانی شده . فانکشن once وقتی کاربرد داره که بخوای مطمئن شی یه کدی فقط یکبار اجرا بشه.مایگریشن های دیفالت کوچکتر شدهقبلا توی لاراول یه سری مایگریشن دیفالت با تاریخ های 2014 و 2019 بود که الان دیگه تاریخ هاشون حذف شده و دوتا فایل شدن‏Route ها تغییر کرده اندتوی لاراول 11 به صورت پیشفرض فقط console.php و web.php داریم و اگه بخواید روت های api رو هم داشته باشید باید کامند php artisan install:api رو بزنید و برای وب سوکت هم همینطور کامند php artisan install:broudcasting رو بزنید ‏ Health Route جدید upتو لاراول 11 health route جدید  up اومده که از DiagnosingHealthEvent استفاده میکنه پس میتونید به کمکش بهتر برنامتون رو  مانیتور (نظارت) کنیدتغییر در APP_KEYتو نسخه های قدیمی تر لاراول اگه APP_KEY رو تغییر میدادی دیتای توی دیتابیس ممکن بود خراب بشه اما توی لاراول 11 با استفاده از   APP_PREVIOUS_KEYS   در env. دیگه برای دیتای رمزنگاری شده‌ی قدیمی مشکلی پیش نمیاد. این میاد و دیتای های قدیمی رو با کلید جدید دوباره رمزنگاری میکنهکرنل Console حذف شدهتوی لاراول 11 کرنل Console حذف شده و شما میتونید کامند هاتون رو توی routes/console.php تعریف کنیدلاراول 11 قراره 12 مارس یعنی دو روز دیگه بیاد ولی اگه بخوایید میتونید با این کامند الان نصبش کنید laravel new cleverdevs --devو پیش نیاز های لاراول 11 رو هم میتونید توی این تصویر ببینید پیشنیاز های لاراول 11منبع : https://laravel-news.com/laravel-11 پیشنهاد میکنم حتما به لینک بالا سر بزنید و توضیحات و مثال های بیشتر رو ببینیددر آخر اگه پست رو دوست داشتید لایک کنید و اگه مشکلی داره کامنت بزارید❤️</description>
                <category>محمد رستمی</category>
                <author>محمد رستمی</author>
                <pubDate>Sun, 10 Mar 2024 19:12:04 +0330</pubDate>
            </item>
                    <item>
                <title>متد های GET و POST چه تفاوتی دارند ؟</title>
                <link>https://virgool.io/@mmdrsdev/http-get-vs-post-a5isxdseth1w</link>
                <description>دیروز تو گروه تلگرام مون (@cleverdevs) بحث بود در باره تفاوت های متد GET و POST بود و گفتم بیام تو یه پست کوتاه در بارشون توضیح بدمنگاه کلیوقتی که کابر با یک سرور از طریق وب ارتباط برقرار میکنه این پروسه توسط پروتکل Hypertext Transfer Protocol (HTTP) فعال میشه. HTTP یک پروتکل درخواست-پاسخ هست که بین کلاینت و سرورهمتد های GET و POST دو متد رایج HTTP هستن از اونا برای گرفتن یا ارسال کردن داده به سرور استفاده میشه اینا بخش جدایی ناپذیر مدل client-server هستن که ارتباط بین کلاینت و سرور رو از طریق وب (WWW) فعال میکنن.متد GETمتد GET برا درخواست داده از یک منبع خاص استفاده میشه که میتونه هر داده قابل دیدنی رو برای یوزر بازیابی کنه مثل سند HTML , تصاویر ، ویدوها و ...برای فرستادن درخواست GET یک کلاینت نیاز به ادرس خاصی از  منبعی که میخواد اطلاعتو ازش بگیره داره بعدش درخواست به سرور ارسال میشه که درخواست رو پردازش میکنه و داده رو برمیگردونهمتد POSTمتد POST داده رو به سرور میفرسته تا یه یه رکوردی تو  منبع ایجاد کنه یا اپدیتش کنه مثلا بیشتر برای ثبت کردن اطلاعات فرم HTML استفاده میشهبرای فرستادن یک درخواست POST یک کلاینت نیاز داره تا ادرس خاصی از منبعی که میخواد دیتارو براش بفرسته و همچنین خود دیتا رو داشته باشه بعدش درخواست به سرور ارسال میشه که پردازش کنه و پاسخ رو به کاربر برگردونهمتد پست اغلب برای ثبت کردن فرم ها یا اپلود فایل روی سرور استفاده میشهتفاوت های بین POST و GET 1 - دیده شدنوقتی از GET استفاده میکنید داده های توی url گنجونده میشن و برای هر کسی قابل دیدن هستن اما موقع استفاده از  POST دیتا تو url نمایش داده نمیشه بلکه تو بدنه‌ی درخواست HTTP هس2 - امنیتمتد GET نسبت به POST امنیت کمتری داره چرا که URL شامل بخشی از دیتای ما میشه از طرفی POST امن تره چون پارامتر ها توی گزارش های وبسرور یا هیستوری مرورگر ثبت نمیشن.3 - کَش درخواست GET میتونه کش بشه و تو هیستوری مرورگر بمونه درحالی که  POST نمیتونه . این معنیش اینه که درخواست های GET میتونن نشانه گذاری بشن ، به اشتراک گذاشته بشن و بازیابی بشن درحالی که درخواست های POST اینطور نیستن4 - وضعیت سروردرخواست های GET در واقع برای بازیابی داده از سرور هستن نه تغیر تو وضعیت سرور از طرفی درخواست های POST برای ارسال داده به سرور برای پردازش و شاید تغیر تو سرور هستن5 - مقدار دیتای ارسال شده متد GET محدودیت کاراکتر داره در حالی که متد POST هیچ محدودیت اینچنینی نداره این به خاطر اینه که متد GET داده هارو از طریق URL میفرسته که محدودیت طول داره درحالی که متد POST دیتارو از طریق HTTP message body (بدنه‌ی پیام HTTP) میفرسته که همچین محدودیتی نداره5 - نوع دادهمتد GET فقط رشته رو پشتیبانی میکنه درحالی که متد POST انواع مختلف دیتارو پشتیبانی میکنهخلاصه که ...تو این پست تفاوت بین GET و POST رو برسی کردیم هردو متد برای ارتباط بین سرور و کلاینت ضروری هستن و اهداف و محدودیت های متفاوتی دارن مهم اینه که متد مناسب رو برای نیاز خاصمون انتخاب کنیمو اما اگه دوست داشتید لطفا لایک کنید و اگه ایرادی دیدید کامنت بزارید❤️منبع : https://www.baeldung.com/cs/http-get-vs-post </description>
                <category>محمد رستمی</category>
                <author>محمد رستمی</author>
                <pubDate>Wed, 27 Dec 2023 15:32:50 +0330</pubDate>
            </item>
                    <item>
                <title>چطور یک افزونه (extension) فایرفاکس (firefox) بسازیم؟</title>
                <link>https://virgool.io/@mmdrsdev/how-to-create-a-firefox-extension-qfetqczqepvf</link>
                <description>شاید شما هم دوست داشته باشید افزونه های خودتون رو واس مرورگر توسعه بدید چه این افزونه برای استفاده شخصی شما باشه چه یه افزونه که بخواهید منتشرش کنید تا بقیه هم استفاده کنیدبرای توسعه افزونه شما به همون چیزایی نیاز دارید که توی توسعه فرانت اند به کار میبرید یعنی html css و javascript خودمونشروع کار!خب اما بریم سراغ شروع ساختن افزونه من این اموزش رو از روی سایت MDN تهیه کردم و خب همون افزونه ای که خودشون ساختن رو باهم میسازیم اما وقتی شما کلیت کار رو یاد بگیرید هر افزونه ای دلتون بخواد میتونید بسازیدتو مرحله اول کار ما یه دایرکتوری برای پروژمون میسازیم . اسم پروژه ما  borderify  عه و ما یه دایرکتوری هم به همین اسم میسازیم : mkdir borderify &amp;&amp; cd borderifyحالا توی این دایکتوری باید یه فایل جیسون بسازیم که یجورایی شناسنامه افزونه محسوب میشه اسم این فایل هم باید manifest.json باشه و محتویات زیر رو توش بزارید تا هر خط رو جداگونه بگم که چیه و چیکار میکنه :‌خط اول میشه ورژن manifest که همون 2 بزارید باشه خط دوم میشه اسم افزونمون و خط سوم ورژن افزونه خودمون که با هر اپدیت طبیعتا بالاتر میرهخط بعدی هم همونطور که از اسمش معلومه توضیحاتی درباره افزونه و کارایی اونهبعد اون icons رو داریم که چنتا ایکون با سایز های مختلف میگیره مثلا اینجا سایز 48*48 رو گذاشتیماما قسمت بعدی که یه مقدار جالب تر میشه content_scripts هستش که به فایرفاکس میگه تا چه اسکریپت هایی رو لود کنه. در واقع کلید matches میگه تو سایت هایی که ادرسوشون با این پترن اوکیه بیا اسکریپت رو لود کن و پترنه هم همه پیچ ها و ساب دامین های mozilla.org رو در بر میگیره و کلید js هم همون فایل اسکریپت ماس که باید لود بشه. (اخر کار لینک هایی رو میزارم که اگه خواستید بیشتر بدونید مطالعه کنید)همونطور که گفتم میتونید ایکون هایی با سایز های مختلفی بزارید مثلا ما برای مانیتور هایی با رزولوشن های بالاتر یه ایکون 96*96 هم میزاریم :حالا باید فایل borderify.js که بالا تو فایل جیسون صداش زدیم رو بسازیم و کدامون رو توش بنویسیمفایل رو میسازیم و کد زیر رو توش قرار میدیم تا یه حاشیه قرمز برای صفحاتی که مچ هستن بیاد :document.body.style.border = &amp;quot5px solid red&amp;quot خب حالا توسعه تموم شد و الان یه افزونه داریم که میشه نصبش کرد و کار کنهدر اخر کار پروژه ما باید به صورت زیر باشهاما برای اینکه نصبش کنیم اول برید تو فایرفاکس و about:debuging رو باز کنید و از بخش سمت چپ this firefox رو باز کنیدبعد روی Load Temporary Add-on… کلیک کنید و فایل manifest.json رو انتخاب کنید و افزونتون نصب میشه و تو لیست افزونه ها میاد حالا اگه سایت موزیلا رو باز کنید یه حاشیه قرمز رنگ میبینیدخیلی ممنون که تا اینجای اموزش با من همراه بودین این فقط یه افزونه ساده بود و صد در صد دنیای افزونه ها وسیع تر از ایناس اگه خواستید در این باره پست های بیشتری بزارم و افزونه های حرفه ای تری بسازیم میتونید کامنت بدیدمنبع :  https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Your_first_WebExtension </description>
                <category>محمد رستمی</category>
                <author>محمد رستمی</author>
                <pubDate>Mon, 04 Sep 2023 15:54:50 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش نصب   lamp server(apache,php,mariadb,phpmyadmin)  در  آرچ لینوکس</title>
                <link>https://virgool.io/@mmdrsdev/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%86%D8%B5%D8%A8-lamp-serverapachephpmariadbphpmyadmin-%D8%AF%D8%B1-%D8%A2%D8%B1%DA%86-%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-arlch76xvmch</link>
                <description>خب تو این پست میخوام بهتون یاد بدم چطور خیلی ساده و قدم به قدم apache و  phpmyadmin و mariadb و phpmyadmin رو روی سیستم عامل ارچ لینوکس یا سیستم عامل های ارچ بیس مثل مانجارو و پارچ لینوکس نصب کنیم.مراحل قبل نصباول از همه یه بار سیستم رو اپدیت کنید تا همه پکیج هاتون بروز شه . برای اپدیت سیستم این کامند رو بزنید :‌sudo pacman -Syyuبعدش برای راحتی کار و اینکه هی  sudo نزنیم کامند لاین رو روت میکنیم برای این کار کامند زیر رو بزنیدsu -l rootبعدش یه ادیتور تحت ترمینال برای ویرایش فایل ها نصب میکنیم که من از nano استفاده میکنم شما میتونید از micro , vim یا چیزای دیگه استفاده کنیدsudo pacman -S nanoنصب apacheبرای نصب apache server کامند زیر رو بزنید :sudo pacman -S apacheبعدش باید فایل /etc/httpd/conf/httpd.conf رو ادیت کنید :nano /etc/httpd/conf/httpd.confخط زیر رو پیدا کنید و اگه کامنت نبود کامنتش کنید :[...]
# LoadModule unique_id_module modules/mod_unique_id.so
[...]توی همون فایل ServerAdmin   ادمین رو پیدا کنی کنید و یه ایمیل معتبر بنویسید(توی محیط تست ضروری نیست)[...]
ServerAdmin you@example.com
[...]بعدش ServerName رو پیدا کنید و برابر با آی پی و پورت لوکال هاست بزارید (127.0.0.1:80) :[...]
ServerName 127.0.0.1:80
[...]فایل رو سیو کنید (توی نانو با ctrl + o) و خارج بشید (توی نانو با crtl + x)  حالا کامند زیر رو بزنید تا apache براتون فعال بشهsystemctl enable --now httpdو برای اینکه ببینید مشکلی نبوده کامند زیر رو بزنیدsystemctl status httpdاگه تو خروجی گفت active یعنی که اوکیه حالا برای تست اینکه ای پی وب سرور تو بروزر هم وا بشه فایل index.html رو توی srv/http بسازید :nano /srv/http/index.htmlو یه کد html توش بزارید برای مثال :&lt;h2&gt;It works!&lt;/h2&gt;حالا 127.0.0.1 رو باز کنید و باید تو خروجی it works رو براتون نشون بدهنصب MariaDBاولش بیاید و mariadb رو با pacman نصب کنیدsudo pacman -S mariadbحالا میام دایرکتوری پیشفرض mariadb رو با اسکریپت خودش میسازیم (کاری با datadir نداشته باشید!) : mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysqlحالا mariadb رو فعال کنید systemctl enable --now mariadbحالا اگه کامند زیر رو بزنید باید active رو نشون بده:systemctl status mariadbحالا برای امن کردن mariadb و اینکه پسورد و ... ست کنید کامند زیر رو بزنید:mariadb-secure-installationخب تو این قسمت هواستون رو جمع کنید که پسورد root پسورد سیستم شما نیست و پسوردیه که واس روت mariadb تعیین میکنید و درکل این قسمت رو خوب دقت کنید! (اگرم سوالی بود کامنت بزارید)نصب PHPتو مرحله اول پکیج های php , php-apache رو با pacman نصب کنیدpacman -S php php-apacheبعدش دوباره فایل کانفیگ apache رو دستکاری میکنیمnano /etc/httpd/conf/httpd.confخط های زیر رو پیدا کنید و اینطوری که من نوشتم باشه حتما (از لحاظ کامنت بودن یا نبودن)[...]
#LoadModule mpm_event_module modules/mod_mpm_event.soLoadModule mpm_prefork_module modules/mod_mpm_prefork.so[...]برید و اخر فایل این کد هارو اضافه کنید :LoadModule php_module modules/libphp.soAddHandler php-script .phpInclude conf/extra/php_module.confبرای اینکه چک کنید کانفیگا درستن یا نه این کامند رو بزنیدapachectl configtestحالا apache رو ری استارت کنید تا با کانفیگ های جدید بالا بیادapachectl restartحالا php رو هم تست کنیدnano /srv/http/info.phpاین فایل رو که ساختین کد زیر رو بزارید داخلش :&lt;?php phpinfo(); ?&gt;حالا 127.0.0.1 رو باز کنید باید اطلاعات php رو نشون بدهنصب phpmyadminبازم تو این مرحله باید phpmyadmin رو با pacman نصب کنیدsudo pacman -S phpmyadminحالا فایل کانفیگ phpmariadb.ini رو ادیت کنید :micro /etc/php/conf.d/phpmariadb.iniو اکستنشن های زیر رو فعال کنید (از کامنت در بیارید) :extension=bz2
extension=iconv
extension=mysqli
extension=pdo_mysqlفایل رو سیو کنید و کامند زیر رو بزنید تا php.ini از رو این فایل کانفیگ بشه php --iniبرای لود کردن phpmyadmin باید یه کانفیگ واسه apache بسازید nano /etc/httpd/conf/extra/phpmyadmin.confحالا این کد هارو بزارید توش Alias /phpmyadmin &amp;quot/usr/share/webapps/phpMyAdmin&amp;quot
&lt;Directory &amp;quot/usr/share/webapps/phpMyAdmin&amp;quot&gt;
    DirectoryIndex index.php
    AllowOverride All
    Options FollowSymlinks
    Require all granted
&lt;/Directory&gt;حالا این فایل رو سیو کنید و برید فایل کانفیگ اصلی خود apache رو ادیت کنید nano /etc/httpd/conf/httpd.confاین خط رو به اخر فایل اضافه کنید [...]
Include conf/extra/phpmyadmin.confسیو کنید و دوباره این دوتا کامند رو بزنیدapachectl configtestوapachectl restartو در اخر برای کانفیگ phpmyadmin این کامند رو بزنیدsed -i -e &amp;quot/blowfish/s/&#039;&#039;/&#039;$(openssl rand -hex 16)&#039;/gi&amp;quot /etc/webapps/phpmyadmin/config.inc.phpecho &amp;quot\$cfg[&#039;TempDir&#039;] = &#039;/tmp&#039;;&amp;quot &gt;&gt; /etc/webapps/phpmyadmin/config.inc.phpحالا با باز کردن http://127.0.0.1/phpmyadminمیتونید phpmyadmin رو ببینیدامیدوارم که براتون کمک کننده باشهمنبع : https://forum.manjaro.org/t/howto-install-apache-mariadb-mysql-php-lamp/13000</description>
                <category>محمد رستمی</category>
                <author>محمد رستمی</author>
                <pubDate>Sun, 02 Jul 2023 23:18:36 +0330</pubDate>
            </item>
                    <item>
                <title>نحوه فعال سازی محصولات جت برینز (...,phpstorm ,pycharm)در لینوکس</title>
                <link>https://virgool.io/@mmdrsdev/active-jetbrains-prouducts-on-linux-w4v6gvwq54cs</link>
                <description>خب اول از همه بگم که اگه توانایی خرید این محصولات رو دارید لطفا به صورت قانونی تهیه و فعال کنیداین پست صرفا برای کساییه که امکان خرید لایسنس قانونی ندارنتو مرحله اول شما بر حسب توزیعتون و پکیج منیجری که داره میاید هر کدوم از محصولات جت برینز رو که میخواید نصب میکنید از اینجا به بعد من پایچارم رو نصب میکنم ولی واس phpstorm هم همون مراحل رو باید بریدبرای نصب pycharm روی توزیع های بر پایه دبیان برید به لینک زیرhttps://www.jetbrains.com/help/pycharm/installation-guide.html#64161bcaبرای نصب در توزیع های بر پایه ارچ هم میتونید از aur helper ها استفاده کنید :yay -S pycharm
or
paru -S pycharm
اما بریم سراغ فعال سازی بعد نصب وقتی پایچارم رو باز میکنید از شما لایسنس میخواد شما اول روی اکانتاتون لاگین کنید تا با دوره 30 روزه رایگان بتونید به همه قابلیت های پایچارم دسترسی  پیدا کنید و بتونید فعال سازی دائمی رو انجام بدینبعد لاگین کردن به اکانتتون از بالا start trial رو انتخاب میکنیدبعد همچین صفحه ای براتون باز میشهصفحه خوش آمد گویی پایچارم - نصب و فعال سازی پایچارم در لینوکسبعدش پایچارم رو ببندید و برید به سایت https://3.jetbra.in/یکی از سرور های فعالش رو انتخاب کنید و فایل زیپی که بالای صفحه هست رو دانلود و اکسترکت کنیدلیست کد های فعال سازی محصولات جت برینز - فعال سازی و نصب محصولات جت بزینزبعد اینکه اکسترکت کردین با ترمینال برین به پوشه اکسترکت شده و این کامند هارو اجرا کنیدsudo chmod +x install.shوsudo ./install.shبعد یکبار سیستم رو ری استارت کنید و دوباره برید به سایت https://3.jetbra.in و با کد فعال سازی برنامه ای که میخواید رو کپی کنیدپایچارم یا هر برنامه دیگه ای که نصب کردید رو باز کنید و روی ایکون تنظیمات در سمت چپ کلیک کنید و Manage licenses رو انتخاب کنید و روی active new license بزنید . توی قسمت activation code کد فعال سازی ای که کپی کردین رو وارد کنیدصفحه فعال سازی pycharm - نحوه نصب و فعال سازی محصولات جت برنیزوارد کردن کد فعال سازی - نحوه نصب و فعال سازی محصولات جت بزینز در لینوکسخب تبریک میگم حالا میتونید تا زمانی که میخواید از محصولات جت برینز استفاده کنیداگه مشکلی تو فرایند فعال سازی داشتید میتونید تو تلگرام به من پیام بدید راهنمایی کنمایدی من تو تلگرام :‌@mmdrsdevموفق باشید</description>
                <category>محمد رستمی</category>
                <author>محمد رستمی</author>
                <pubDate>Fri, 30 Jun 2023 03:06:37 +0330</pubDate>
            </item>
            </channel>
</rss>