دسته: Laravel

لاراول یه فریمورک باحال و سادست که این روزا محبوب‌ترین بین پی اچ پی کارا حساب میشه. اینجا نوشته هایی در مورد این فریمورک میذارم که ممکنه به دردتون بخوره 🙂

  • دوره‌ی آموزش سریع لاراول

    دوره‌ی آموزش سریع لاراول

    بعد از حدود ۱۰ سال کار با لاراول، الان حس میکنم زمان خوبیه که یکم در موردش حرف بزنم و اول آموزشش بدم و بعد اگه شد بیشتر در مورد نحوه‌ی استقرار پروژه و کلی چیزای دیگه حرف میزنم. ویدیو ها بصورت رایگان توی این کانال یوتوب منتشر میشه و کد پروژه ای که کار میکنیم هم توی این ریپازیتوری میتونید ببینید. این داکیومنت تا خیلی مدت دیگه بروز میشه و فعلا در حد یه پیش نویس هست که قسمت های مختلف آموزش رو روی این پست آپدیت میکنم. سورس کد قسمت های مختلف این دوره رو میتونید با تگهایی که توی این ریپازیتوری هست ببینید.

    نصب لاراول با داکر روی مک

    توی ویدئوی اول در مورد نصب و شروع کار حرف زدم. تک تک سیستم عامل ها رو نمیتونستم برو و بگم ولی میتونید با داکر پروژه رو خیلی سریع بالا بیارید. هدف از این دوره اینه که خیلی سریع بدون اینکه ویدیو رو بزنید جلو کار رو یاد بگیرید. من برای نصب لاراول روی مک از این کامند استفاده کردم:

    curl -s "https://laravel.build/laravel-mentor" | bash

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

    برای مک هم جدا از داکر میتونید از لاراول هرد استفاده کنید که توسط کامینیوتی خود لاراول توسعه داده میشه. کاربرهای لینوکس هم که خودشون بلدن چیکار کنن و معمولا همون داکر بهترین گزینه هست واسشون. اینجا میتونید بصورت ویدیویی توضیحاتم رو ببینید:

    نصب لاراول روی مک و سایر سیستم عامل ها

    تعریف مسیرها در لاراول

    در بخش دوم در مورد مسیر ها حرف زدم و اینکه چطور میشه مسیرهای به سبک مدرن تعریف کرد. این روزا دیگه خبری از مسیرهای شلوغ و طولانی نیست و توسعه دهنده ها سعی میکنن مسیرها با معنی و تمیز باشن. حتی طراح های محصول روی هم روی این قضیه حساس تر شدن و واسشون مهمه که آدرسی که فردا برای مارکتینگ میخوان بفرستن تمیز و معرف محتوای صفحه باشه. مثلا ما وقتی این آدرس رو میبینیم به راحتی میتونیم حدس بزنیم اون تو چه خبر میتونه باشه.

    https://github.com/pricing

    توی ویدیو میتونید نحوه ی تعریف مسیرهای ساده در لاراول رو ببینید:

    نحوه ی تعریف مسیر ها در لاراول

    دستوران خط فرمان (CLI tools) در لاراول

    توی لاراول یه فایل داریم به اسم artisan که باهاش میشه دستورات کامند لاینی اجرا کرد. در واقع یه ابزار خط فرمانی هست که میشه فیچر های مختلف لاراول رو باهاش تولید کرد یا یسری چیزها رو دید. مثلا دستور زیر به ما لیست مسیر های توی پروژمون رو میده:

    sail artisan route:list

    آرتیزان کلی بهتون امکانات میده که باهاشون میتونید کارای مختلف بکنید ولی بازم ممکنه یه کامندی نیاز داشته باشید که توی لاراول وجود نداره. اون موقع خودتون میتونید دست به کار بشید و کامند خودتون رو بسازید. توی این ویدیو این اینترفیس رو معرفی کردم و در موردش بیشتر توضیح دادم.

    کار با دستور artisan در لاراول

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

    داشتم به این فکر میکردم که یه روشی داشته باشیم که من کدهای هر جلسه رو چطوری بهتون بدم؟ گیت و گیتهاب گزینه ی خوبیه ولی مشکل این بود که اگه هر روز کد رو آپدیت میکردم شما دقیقا کد مریوط به جلسه ی خاص رو نداشتید. از طرف دیگه توی این روزا کسی حوصله ی دانلود و اکسترکت کردن فایل zip رو نداره. بخاطر همین شاید بهترین کار اینه که کد مربوط به هر جلسه رو با یه تگ مشخص روی گیت بذاریم. اینجوری میتونید همون بالا کد رو چک کنید با کامندی که میخواید دانلود کنید. توی این جلسه در مورد این حرف زدم.

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

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

    تعریف ویو در لاراول

    جلوگیری از تکرار در blade و با لاراول

    فرض کنید که میخواید کلی صفحه ی blade داشته باشید که هر کدوم کلی چیز میز تکراری دارن. توی دنیای پی اچ پی پیور مخصوصا اگه تازه کار هستید خیلی چالش دارید که بخش های تکراری رو حذف کنید و فقط یجا داشته باشید. لاراول با فیچرهایی مثل yield و extends این مدل مشکلات رو خیلی شیک و تر و تمیز حل کرده. توی این ویدیو در مورد این داستانا حرف زدم

  • اصلاح جدول‌های لاراول بعد از migrate کردن

    اصلاح جدول‌های لاراول بعد از migrate کردن

    حتما اگه مدتی با لاراول کار کرده باشید میدونید که مایگریشن های لاراول چیزای خطرناکی ان 🙂 از این جهت که ممکنه یه چیزی رو مایگریت رول بک کنید و داده ای که دارید رو از دست بدید. خب سوالی که پیش میاد اینه که پس چجوری فیلد ها رو ادیت کنیم؟ داکیومنت مایگریشن خود لاراول پکیج doctrine/dbal رو پیشنهاد میکنه برای اینکه تغییرات رو روی جدول ها انجام بدیم.

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

    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title', 500);
        $table->text('body')->nullable();
        $table->timestamps();
    });

    حالا میخوام به جدول یه فیلد دیگه اضافه کنم به اسم published. برای این کار به صورت زیر عمل میکنم که اول یه مایگریشن درست میکنم:

    php artisan make:migration alter_posts_add_published_field

    و بعد توی متد up کاری که میخوام رو انجام میدم:

    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('published')->nullable();
    });

    با مایگریت کردن مجدد تغییراتی که دادید اعمال میشه. حالا فرض کنید همین فیلد آخری رو میخواید مقدار default واسش بذارید. برای تغییر در فیلدهای موجود پکیج زیر رو نصب کنید:

    composer require doctrine/dbal

    یه مایگریشن جدید درست میکنید:

    php artisan make:migration alter_posts_add_default_value_to_published_field

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

    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('published')->default(0)->change();
    });

    اگه تابع change رو نذارید خطای زیر رو میگیرید چون فکر میکنه که دارید فیلد رو اضافه میکنید:

    SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'published' (SQL: alter table `posts` add `published` tinyint(1) not null default '0')

    اگه تابع change رو بذارید آخر مایگریشن ولی dbal نصب نباشه این خطا رو میگیرید که اینم مشخصه چی میگه:

    Changing columns for table "posts" requires Doctrine DBAL. Please install the doctrine/dbal package.

    نکته ی دیگه ای که باید مد نظر داشته باشیم اینه که اگر مثلا یه کلید خارجی دارید اضافه میکنید باید حواسمون باشه که کلید خارجی و لوکال با هم compatible باشن که البته این نکته توی ساخت همون مایگریشن ها هم مهمه دیگه.

    اگه دیدید خیلی مایگریشن هاتون زیاد شدن میتونید با این فیچر از شرشون خلاص بشید.

    موفق باشید 🙂

  • استفاده از valet برای لاراول

    استفاده از valet برای لاراول

    لاراول تلاش میکنه همه چی رو راحت کنه و ابزارهایی که واسش میان هم تلاششون برای همینه انگار 🙂 لاراول ولت یه ابزار خوب برای توسعه ی لوکال روی مک هست که میتونه دامین های مجازی برای سایت های شما درست کنه و میتونه ورژن های مختلف پی اچ پی رو خیلی راحت در دسترس شما قرار بده. روی nginx هست و اینم شاید بد نباشه برای ماها. و نهایتا خوبی جدیدی که بهش اضافه شده اینه که میتونید باهاش بگید روی فلان پروژه فلان ورژن پی اچ پی ران بشه و روی اونیکی ورژن دیگه ای.

    داکیومنت ولت خیلی کامل هست و بهش حتما سر بزنید. من فقط اینجا مینویسم که نوشته باشم.

    نصبش که خیلی راحته:

    brew install php

    و بعدش پکیج کامپوزرش:

    composer global require laravel/valet

    و نهایتا:

    valet install

    برای سوییچ بین ورژن های مختلف این شکلی عمل میکنیم:

    valet use php@7.2

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

    cd ~/Sites
     
    valet park

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

    cd ~/Sites/laravel
     
    valet link

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

    cd ~/Sites/laravel
     
    valet link application

    لینک های قبلی رو اینجوری ببینید:

    valet links

    و یچی رو آنلینک کنید:

    cd ~/Sites/laravel
     
    valet unlink

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

    cd ~/Sites/example-site
     
    valet isolate php@8.0

    این خیلی سکسیه و قطعا دستی بخواید اینکارو بکنید داستان زیاد داره.

    بازم اوصیکم به داکیومنت 🙂 موفق باشید.

  • تدریس خصوصی کار با datatables

    دیتاتیبل ها همون جدول های معمولی در html هستن با این تفاوت که کلی امکانات دارن که بخواید ازشون استفاده کنید. معروفترین پکیج دیتاتیبل که برای وب توسعه داده شده پکیج datatables.net هست. ساده ترین حرکتی که میتونید با این پکیج بزنید اینه که فایل های css و js این پکیج رو لود کنید و به سادگی فانکشن دیتاتیبل رو روی جدولتون ران کنید.

    $(document).ready( function () {
        $('#myTable').DataTable();
    } );

    دستور بالا جدولتون رو سمت کلاینت یه فرمت خوب میده که میتونید مرتب سازی – صفحه بندی – جستجو و… رو روش انجام بدید. کار وقتی پیچیده میشه که داده ی شما حجمش بالا هست و نمیخواید همه رو بیارید اینور و بعد رندر کنید. اگه داده خیلی زیاد باشه مرورگر از پس پردازش این حجم از داده برنمیاد و هنگ میکنه یا خیلی دیر جواب میده.

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

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

    پیش نیازهای حضور در دوره ی datatables

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

    • یک زبان بکندی مثل PHP
    • زبان Javascript و ترجیحا JQuery
    • سابقه ی کار با یک زبان دیتابیس مانند SQL
  • اجرای کارها با صف در لاراول

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

    صف ها در برنامه نویسی به چه دردی میخورن؟

    راستش صف ها جدا از اینکه توی زندگی ما آدم ها خیلی مهم هستن بعضی موقه ها توی کدهامون هم خیلی مهم میشن. مخصوصا اگه معلوم نباشه که هر کی چند دقیقه کارش طول میکشه. اگه بخوام یک مثال عملی بزنم فرض کنید یک تعداد خیلی زیادی کار دارید و میخواید اونها رو انجام بدید و از طرف دیگه مدت زمان انجام شدن هر کدوم از اونها از شروع تا پایان هم مشخص نیست. فرض کنید من یه موتور جستجو دارم که میخوام توی وبسایت ها بخزم و محتوای اونها رو ایندکس کنم و اگه ویدئو و عکسی هست پردازش کنم و ایندکس کنم. اگه محتوا متنی باشه خیلی زود و اگه عکس باشه بیشتر و ویدئو باشه خیلی بیشتر طول میکشه این عملیات تموم بشه. یه راه اینه که یه for بنویسم و بگم پشت سر هم این کارها رو انجام بده. ولی اگه توی ایتریشن دوم کدم به خطا خورد چی؟ اصلا از کجا بدونم به خطا خورده؟ اگه خواستم اجراهایی که به خطا خوردن رو دوباره اجرا کنم چی؟

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

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

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

    اولین کاری که باید بکنید اینه که جدول هاتون رو ایجاد کنید. برای اینکار توی محیط ترمینال لاراول و توی روت پروژه این دستورها رو ران کنید:

    php artisan queue:table
    php artisan queue:failed-table
    php artisan migrate

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

    خب حالا بذارید یه جاب خیلی ساده بنویسیم. با دستور زیر میتونید یک جاب جدید درست کنید. جابها توی فولدر app/Jobs قرار میگیرن که اگه دستور زیر رو ران کنید فولدر خودش ساخته میشه.

    php artisan make:job MyFirstJob

    الان اگه فایل MyFirstJob.php رو باز کنید یچی مثل این میبینید:

    <?php
    
    namespace App\Jobs;
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Foundation\Bus\Dispatchable;
    
    class MyFristJob implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        /**
         * Create a new job instance.
         *
         * @return void
         */
        public function __construct()
        {
            //
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            //
        }
    }
    

    داخل متد handle این رو بنویسید:

    $seconds = rand(0, 15);
    sleep($seconds);
    Log::info('job ran ' . Carbon::now()->toDateTimeString());

    توی این قسمت گفتم که یک عدد تصادفی بین ۰ تا ۱۵ تولید کن و بعد به اندازه اون عدده ثانیه صبر کن و یه خروجی رو توی فایل لاگ بنویس و فرض کنید اون اسلیپ شدنه یه جاب سنگین مثل پردازش ویدیو و… هست. و یادتون نره که Carbon و Log رو use کنید.

    گذاشتن جاب در صف

    برای گذاشتن جاب توی صف در لاراول کافیه متد dispatch از اون جاب رو صدا بزنیم. برای مثال توی فایل routes/web.php قطعه کد زیر رو اضافه کنید:

    Route::get('put', function () {
       \App\Jobs\MyFristJob::dispatch();
    });

    گفتم هر بار روت /put با متد get فراخوانی شد یدونه از این جاب رو بذار توی صف. پس کافیه روت /put رو get کنید. بعد از این کار باید توی جدول jobs یه رکورد ایجاد شده باشه. فیلد هایی که جدول jobs داره خیلی پیچیده نیستن و با یه نگاه میتونید ببینید که داره چه اتفاقی میفته.

    صف های ایجاد شده در دیتابیس لاراول

    تنظیمات درایور صف در لاراول

    خب حالا نوبت این رسیده که صف رو توی پروژه ران کنیم. ولی قبلش یه سر به فایل config/queue.php بزنیم. اولین چیزی که احتمالا میبینید خط زیر هست:

    'default' => env('QUEUE_CONNECTION', 'sync'),

    این خط میگه که کانکشن پیشفرض من برای اجرای صف ها چی باشه که بصورت پیشفرض روی درایور sync تنظیم شده. درایور sync که یکم پایینتر هم اینجا و هم توی فایل کانفیگ میبینیدش میگه هر جابی که دیسپچ شد همون لحظه شروع بشه به ران شدن. در واقع اصلا صف حساب نمیشه.

    'sync' => [
        'driver' => 'sync',
    ],

    یسری کانشکن هم پایین تر از اون و اینسری فقط توی فایل کانفیگ میبینید 🙂 اونها کانکشن های مختلف به سیستم های مدیریت صف مختلف هستن. ما توی اینجا کانکشن پیشفرض رو تنظیمش میکنیم روی database و پایین تر در قسمت failed میتونید مشخص کنید که جابهایی که با خطا مواجه میشن کجا ذخیره بشن.

    اجرای یک صف در لاراول

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

    php artisan queue:work

    این دستور شروع میکنه دونه دونه جابهایی که توی جدول jobs هستند رو اجرا میکنه. و بعد از تموم شدن جابهای صف، بازم منتظر میمونه که جاب جدید dispatch شه.

    اجرای صف ها در لاراول

    اگه فایل لاگتون رو چک کنید باید یچیزی مثل این رو ببینید که نشون میده هر جاب بعد از جاب قبلی اجرا شده.

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

  • نصب MongoDB و استفاده در لاراول

    اگه قصد دارید به MongoDB روی بیارید کاره بدی نمیکنید ولی یکم دنگ و فنگ داره این قضیه. توی این پست میخوام تجربه خودم رو از مهاجرت از مای اس کیو ال به مانگو دی بی رو بگم. البته خیلی تجربه عمیقی نیست و فعلا در حد معرفی و نحوه نصب و رفع مشکلات اولیه میگم. بعد ها به جاهای خفنش رسیدم بازم در مورد اونا هم میگم.

    توجه: همه کارایی که من میگم روی Ubuntu 18.04.3 تست شده و بقیه جاها رو نمیدونم.

    بعد از اینکه لاراول رو نصب کردید خیلی راحت با دستور زیر مانگو رو هم نصب کنید (البته برای این بخش بهتره از طریق داکیومنت مانگو دی بی پیش برید).

    sudo apt-get install -y mongodb-org 

    معروف ترین پکیجی که لاراولی ها برای کار با مانگو باهاش کار میکنن jenssegers/laravel-mongodb هست که میتونید نصبش کنید ولی قبلش باید یکار دیگه هم بکنید و اون هم اینه که درایور PHP برای مانگو رو نصب کنید. من چند تا راه رو رفتم و این پست از داکیومنت PHP واسم جواب داد. در واقع اگه PECL داشته باشید خیلی راحت با این کامند کارتون راه میفته:

    sudo pecl install mongodb

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

    sudo service mongod start

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

    use test

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

    show dbs

    حالا با دستور زیر میتونید یوزر های این دیتابیس رو ببینید:

    db.getUsers()

    توجه کنید که db نباید اسم دیتابیستون باشه و همین db باید باشه. اگه یوزری ندارید باید بسازیدش. برای این کار این شکلی میتونید عمل کنید:

    db.createUser({user:'admin', pwd:'Aa123', roles: [{role:"readWrite", db:"test"}]})

    و حالا برید کانکشن دیتابیس رو توی فایل database.php بسازید. و بعدش دیفالت کانکشن رو هم تغییر بدید.

    'mongodb' => [
        'driver'   => 'mongodb',
        'host'     => env('DB_HOST', 'localhost'),
        'port'     => env('DB_PORT', 27017),
        'database' => 'test',
        'options'  => [
            'database' => 'admin' 
        ]
    ],
    'default' => env('DB_CONNECTION', 'mongodb'),

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

    DB_CONNECTION=mongodb
    DB_HOST=localhost
    DB_PORT=27017
    DB_DATABASE=test
    DB_USERNAME=admin
    DB_PASSWORD=Aa123

    و حالا php artisan migrate کنید. ایشالا که همه چی اوکی باشه.

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

    mongorestore --db test ./orgdictionary

    استفاده از Eloquent در لاراول با MongoDB

    اگه میخواید از Eloquent توی لاراول استفاده کنید باید مدل هاتون رو از Eloquent پکیج اسکتند کنید. بعنوان مثال برای مدل Post بصورت زیر عمل کنید:

    use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
    class Post extends Eloquent
    {

    }

    حالا میتونید توی کنترلرتون از App\Post::all() و… استفاده کنید. البته برای جدول یوزر باید یه حرکت بیشتر هم بکنید و اون اینه:

    use Illuminate\Contracts\Auth\Authenticatable;
    use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
    
    use Illuminate\Auth\Authenticatable as AuthenticableTrait;
    class User extends Eloquent implements Authenticatable
    {
         use Notifiable;
         use AuthenticableTrait;
    {

    این باعث میشه که توی مرحله Auth هم به اررور نخورید و مثل حالت معمولی با Auth::attempt لاگین کنید.

  • خطای لاراول ۶ بعد از نصب

    اگه لاراول ۶ رو میخواید نصب کنید و وقتی php artisan serve کردید اررور زیر رو گرفتید:

    No application encryption key has been specified.

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

    php artisan key:generate 
    php artisan config:cache
  • نصب پکیج لاراول بدون ssh

    البته عنوان خیلی سکسی شد چون مجبور بودم کوتاه باشه ولی منظورم اینه که اگه مثلا دسترسی ssh نداریم ولی دسترسی آپلود داریم بتونیم پکیج رو نصب کنیم.

    آپلود پوشه‌ی ریپازیتوری

    من خودم یک سایت داشتم روی هاست اشتراکی و لازم داشتم که یک پکیج که تازه نصب کردم رو آپلود کنم. برای این کار خیلی راحت اول رفتم توی فولدر vendor و پوشه‌ی ریپازیتوری رو آپلود کردم. مثلا من پکیج barryvdh/cors رو نصب کرده بودم و رفتم پیداش کردم از روتی که داره.

    آپدیت کردن فایل autoload

    همونطور که میدونید ما بعد از نصب یک پکیج یه dump-autoload میکنیم که فایل های autoload رو آپدیت کنه کامپوزر. ولی چون دسترسی نداریم میریم و فایل vendor/composer/autoload_psr4.php رو پیدا میکنیم و خط هایی که توی فایل لوکالمون هستن رو بهش اضافه میکنیم. برای مثال توی پکیج cors که من نصب کردم خط های زیر بهش ربط داشتن و من آپدیت کردم.

    'Barryvdh\Cors\' => array($vendorDir . '/barryvdh/laravel-cors/src'),
    'Asm89\Stack\' => array($vendorDir . '/asm89/stack-cors/src/Asm89/Stack'),

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

  • خطای لاراول: Prepared statement needs to be re-prepared

    من هر چند وقت یبار میبینم سایت بالا نمیاد و لاگ رو چک میکنم میبینم یچی مثل خط زیر رو پروژه ی لاراول لاگ داده:

    SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared (SQL:...

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

    'options'   => [
        \PDO::ATTR_EMULATE_PREPARES => true
    ]

    یعنی الان کانکشنتون باید یچی مثل این بشه:

    'mysql' => [
        'driver' => 'mysql',
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'strict' => true,
        'engine' => null,
    	'options'   => [
    		\PDO::ATTR_EMULATE_PREPARES => true
    	]
    ],

    من کلی گشتم تا پیدا کردم گفتم دیگه شما نگردید 🙂

  • برنامه نویس حرفه ای لاراول!

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

    لاراول یک فریمورک برای توسعه سریع و تمیز

    از ویژگی های لاراول میتونم به همراه بودن بستر هایی نظیر تست، صف ها در لاراول، برودکست و کانتینر قدرتمندش اشاره کنم که کنار هم بودن اینهمه فیچر میتونه باعث بشه هر دولوپری به سیستم دیگه ترجیهش بده.

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