بایگانی برچسب: s

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

نوشته‌شده در توسط .
آموزش ایجاد صف

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

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

راستش صف ها جدا از اینکه توی زندگی ما آدم ها خیلی مهم هستن بعضی موقه ها توی کدهامون هم خیلی مهم میشن. مخصوصا اگه معلوم نباشه که هر کی چند دقیقه کارش طول میکشه. اگه بخوام یک مثال عملی بزنم فرض کنید یک تعداد خیلی زیادی کار دارید و میخواید اونها رو انجام بدید و از طرف دیگه مدت زمان انجام شدن هر کدوم از اونها از شروع تا پایان هم مشخص نیست. فرض کنید من یه موتور جستجو دارم که میخوام توی وبسایت ها بخزم و محتوای اونها رو ایندکس کنم و اگه ویدئو و عکسی هست پردازش کنم و ایندکس کنم. اگه محتوا متنی باشه خیلی زود و اگه عکس باشه بیشتر و ویدئو باشه خیلی بیشتر طول میکشه این عملیات تموم بشه. یه راه اینه که یه 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 شه.

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

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

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

نصب پکیج لاراول بدون 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 نوشته شده که میتونید ازش استفاده کنید و اپلیکیشن های تحت وبتون رو خیلی سریع و آسون و بدون دردسر راه بندازید. اگه تازه دارید شروع میکنید که لاراول یاد بگیرید باید بدونید که کارتون زیادم سخت نیست و اگه PHP بلدید خیلی راحت میتونید یاد بگیرید لاراول رو هم. میتونید از طریق منابع زیر لاراول رو یاد بگیرید:

داکیومنت های خود سایت لاراول

سایت خود لاراول بهترین جا هست که ازش یاد بگیرید. البته میتونید بعنوان مرجع داشته باشیدش و ازش استفاده کنید : https://laravel.com/docs/5.5 و میتونید هر جور که دوست دارید یه نسخه آفلاین ازش تهیه کنید و استفاده کنید ازش

ویدئو های آموزشی لاراکستس

سایت لاراکستس توسط یکی از توسعه دهنده های لاراول به نام جفری وی مدیریت میشه و کورس های آموزشیش بی نظیر هست در مقایسه با ویدئو هایی که برخی از دوستان وطنی ارائه میدن و… آدرس سایت : http://laracasts.com

سایت لاراول نیوز

اکه میخواید از روند تغییرات و اخبار لاراول با خیر باشید سایت لاراول نیوز رو دنبال کنید : https://laravel-news.com

سایت لاراول تریکس

این سایتم کلی تریک لاراولی داره و میتونه به دردتون بخوره، فقط من نمیدونم چرا ایرانیها بیشتر از همه استفاده میکنن از این سایت(الکساش روی ایران ست شده) : http://laravel-tricks.com

سابتهای ایرانی از جمله سایت git.ir هم کلی ویدئو گذاشتن که میتونید دانلودشون کنید اگه به حلال و حروم اعتقاد ندارید 🙂

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

ساختن توابع Helper در لاراول

نوشته‌شده در توسط .

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

لاراول کلی هلپر خوب بصورت آماده داره که خیلی از کارهارو براتون آسون میکنه، مثل کار با آرایه ها، فایل ها، رشته ها، روت ها و یکی از پر کاربرترینشون هم همین dd  خودمون :). شما میتونید هلپر های خودتون رو بصورت دستی هم تعریف کنید و با کمپوزر بصورت خودکار لودشون کنید.

نحوه ساختن فایل Helper در لاراول

همونطور که گفتم هلپر ها تابع هستند پس باید داخل یه فایل نوشته بشن. لاراول هیچ دایرکتوری خاصی برای helper ها در نظر نگرفته و شما میتونید بصورت دلخواه براش جا در نظر بگیرید. من مثلا داخل app/Http/Helpers  رو برای این کار در نظر میگیرم و داخلش فایل main.php  رو قرار میدم.

لود خودکار فایل ها در لاراول با کمپوزر

یکی از کاربردهای باحال کمپوزر جدا از مدیریت نیازمندی ها، همین autoload هست که به شما این امکان رو میده که در ران تایم فایل های دلخواهتون رو توی کدتون لود کنید بدون اینکه اون بالا بنویسید require_once any.php . در پروژه لاراولتون یه فایل دارید به اسم composer.json ، توی این فایل یه key به اسم autoload وجود داره و داخلش میتونید مشخص کنید که چه فایل هایی به autoload اضافه بشن. یه مثال واستون میزنم که کاملا بدونید چی به چیه :

"autoload": {
    "files": [
        "app/Http/Helpers/main.php"
    ],
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},

به کمپوزر گفتم که فایل main.php  رو بذار توی autoload. حالا باید به کامپوزر بگیم که فایل های autoload رو از اول بسازه، برای این کار توی روت پروژه این کامند رو اجرا کنید :

composer dump-autoload

حالا main.php  و فانکشن هایی که داخلش تعریف میکنید همیشه در دسترس خواهند بود.

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

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

if (! function_exists('test')) {
    function test($key, $default = null) {
        // ...
    }
}

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

 

موفق باشید 🙂

کارکردن با pivot table ها یا جداول محور در laravel

نوشته‌شده در توسط .

مجددا باید بگم که من همه کارام رو توی لاراول ۵٫۰٫۰ انجام میدم 🙂

امروز میخوام در مورد یک چیز خیلی مهم توی لاراول صحبت کنم… نحوه ی ارتباط برقرار کردن چند به چند بین دو جدول در لاراول ۵٫

یک مثال کاملا واقعی در مورد رابطه های چند به چند در لاراول

توی داکیومنت رسمی لاراول مثالی که واسه روابط چند به چند اومده ، رابطه ی role و user هست که یک یوزر میتونه متعلق به چند نقش باشه و برعکس ، یعنی یک نقش مثل ادمین هم میتونه متعلق به چند کاربر باشه . من یه مثال ملموس تر براتون میزنم : رابطه ی محصولات و فروشگاهها رو در نظر بگیرید. شما نیاز دارید که بدونید مثلا گوشی فلان رو چه فروشگاههایی دارن و همچنین نیاز دارید بدونید که فلان فروشگاه چه گوشیهایی داره…

$Shop->products();//for grab products of a shop...
$Product->shops();//and reverse...

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

shops
– id
– name

products
– id
– name

product_shop
– product_id
– shop_id

برای اینکه بین ذو جدول رابطه چند به چند بوجود بیاد ، بهترین راه استفاده از یک جدول میانی هست که ارتباط بین دو جدول رو تشکیل بده. این جدول حداقل باید دو فیلد داشته باشه ، که آیدی دو ریکورد از دو جدول رو به هم نسبت بده…

برای اینکه این جدول رو درست کنیم میتونیم از مایگریشن های خود لاراول استفاده کنیم… مثلا در یک وبلاگ ، پست ها و تگ ها دارای رابطه چند به چند هستند که جدول post_tag رو میتونیم به صورت زیر بسازیم :

Schema::create('post_tag', function(Blueprint $table)
		{
			$table->integer('post_id')->unsigned();
			$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');

			$table->integer('tag_id')->unsigned();
			$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
		});

 

جدول  post_tag  رو اصطلاحا بهش میگن pivot table… نام جدول pivot باید بصورت First_Second باشه که First نام جدول اول و Second نام جدول دوم هست… ترتیب هم باید بر اساس حروف الفبا باشه…  بصورت پیشفرض جدول pivot دوتا فیلد داره : post_id و tag_id که میتونید فیلد های بیشتری هم بهش اضافه کنید . مثلا برای اینکه شما یک پلن رو به یک کاربر اختصاص بدید میتونید تاریخ پایان پلن رو هم توی جدول میانی یا همون pivot ذخیره کنید. برای بدست آوردن مقدار فیلد های دیگه هم میتونید از این روش استفاده کنید :

public function products()
{
    return $this->belongsToMany('App\Products')
    	->withPivot('products_amount', 'price')
    	->withTimestamps();
}

 

حل مشکل invalid default value for created_at در لاراول

نوشته‌شده در توسط .

در ادامه طرح سوالات ابتدایی لاراول ، این پست رو منتشر میکنم 🙂

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

 [Illuminate\Database\QueryException]
  SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'created_at' (SQL: create table `
  users` (`id` int unsigned not null auto_increment primary key, `name` varchar(255) not null, `email` varchar(255) n
  ot null, `password` varchar(60) not null, `remember_token` varchar(100) null, `created_at` timestamp default 0 not
  null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci)

این خطا بخاطر اینه که مای اس کیو ال شما مقدار صفر رو بعنوان مقدار پیشفرض تاریخ قبول نمیکنه . احتمالا شما NO_ZERO_DATE رو توی تنظیمات mysqlتون فعال کردید… اگه با ومپ کار میکنید به پوشه ی (مثلا) C:\wamp64\bin\mysql\mysql5.7.9  برید و فایل my.ini  رو باز کنید و مقادیر NO_ZERO_DATE,NO_ZERO_IN_DATE, رو سرچ بزنید و حذف کنید و mysql رو ریستارت کنید

الان همه چی حله… php artisan migrate  رو برای تست ران کنید.

آموزش نصب Illuminate/HTML در لاراول ۵

نوشته‌شده در توسط .

چند روزیه تو یه گروه تلگرامی لاراول عضوم ، انقد سوالای سطح پایین پرسیده میشه که قلبت درد میگیره… تصمیم گرفتم هر از چندگاهی در مورد مقدمات لاراول حرف بزنم و خب اولین چیزی که ملت درگیرشن همین Illuminate/HTML هست… توی لاراول ۴ هلپر  HTML بصورت پیشفرض وجود داره و توی لاراول ۵ برداشته شده… خوشبختانه HTML بصورت یه پکیج جدا وجود داره و میتونید ازش استفاده کنید براحتی…

برای نصب Illuminate/HTML ابتدا کد زیر رو توی روت پروژه ران کنید :

composer require "illuminate/html":"5.0.*"

قدم دوم اینه که /config/app.php  رو باز کنید و خطهای زیر رو اضافه کنید :

'providers' => [
	...
 
	'Illuminate\Html\HtmlServiceProvider',
],
 
'aliases' => [
 
	...
 
	'Form'=> 'Illuminate\Html\FormFacade', 
	'Html'=> 'Illuminate\Html\HtmlFacade',
],

الان همه چی حله… برای تست هم میتونید از ابزار tinker استفاده کنید

php artisan tinker
> Form::text('foo')
"<input name=\"foo\" type=\"text\">"

موفق باشید 🙂

الان دیگه html از هسته لاراول جدا شده و بصورت پکیج جدا از illuminate در laravelcollective.com توسعه داده میشه… برای نصبش توی composer.json کد زیر رو اضافه کنید :

 

مفهموم و کاربرد Facade در لاراول

نوشته‌شده در توسط .
آموزش لاراول

با سلام مجدد ، حتما اگه با لاراول کار کرده باشید ، بارها اسم facade به گوشتون خورده. اما facade واقعا چیه؟ طبق گفته ی سایت خود لاراول ” فساد یک ظاهر استاتیک رو برای کلاسهایی که در کانتینر وجود دارن ایجاد میکنه” در مورد IOC container قبلا توی این پست صحبت کردم . حتما در مورد کلاسهای استاتیک هم اطلاع دارید دیگه و قبلا در این باره هم اینجا حرف زدم…

لاراول خودش کلی فساد! داره که شما بدون اینکه شاید متوجه بشید دارید ازشون استفاده میکنید. مثلا همین Session یا Form و… که استفاده میکنید همگی فساد هستند… لیست کامل فسادهای لاراول رو میتونید اینجا ببینید. از اونجایی که من خودم با لاراول ۵ کار میکنم لینک هایی که به داکیومنت لاراول میدم هم به ورژن ۵ هست و شما میتونید اون بالا سمت راست ، روی ورژن دلخواهتون سوئیچ کنید که البته توی این مورد تفاوت خاصی ندارن… شما میتونید توی لاراول فساد دلخواهتون رو تعریف و استفاده کنید و بعضی جاها کارتون رو خیلی جلو میندازه و البته نشان از حرفه ای بودن شما هم هست این کار… قبل از اینکه بپردازید به ساخت فساد برید و در مورد کانتینر لاراول اطلاعات کامل رو بدست بیارید.

ساخت یک فساد – facade دلخواه در لاراول

هر فسادی که شما میسازید توی لاراول ، باید از کلاس پایه ی Facade  مشتق شده باشن و حتما باید متد getFacadeAccessor  رو ایمپلیمنت کنید ، توی این متد شما به لاراول میگید که وقتی این فساد رو صدا زدم ، کدوم کلاس که توی کانتینر هست رو لود کنه… کلاس پایه ی Facade  از متد جادویی __callStatic()  برای این کار استفاده میکنه. بعد از ساخت یک فساد به راحتی میتونید به روش زیر به فساد متد مورد نظرتون دسترسی پیدا کنید :

$value = Cache::get('key');

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

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

namespace PaymentGateway;

class Payment {

    public function process()
    {
        //
    }

}

قدم اول این بود که این کلاس رو در کانتینر بایند کنیم ، بصورت زیر :

App::bind('payment', function()
{
    return new \PaymentGateway\Payment;
});

بهترین جا هم برای این کار همونطور که میدونید متد register  یک service provider هست که من اسمش رو میذارم PaymentServiceProvider .

قدم دوم : حالا میتونید کلاس فسادتون رو بسازید

use Illuminate\Support\Facades\Facade;

class Payment extends Facade {

    protected static function getFacadeAccessor() { return 'payment'; }

}

قدم سوم

اینه که فساد رو به لاراول معرفی کنید ، برای این کار باید توی config/app.php  یک نام اختصاری برای فساد خودتون بذارید :

'Payment'       => 'Illuminate\Support\Facades\Payment',

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

Payment::process();

در نهایت لیست کلی فساد های لاراول که از لارابوک کپی کردم 🙂

فاساد نام سرویس مشخصه سرویس
App Illuminate\Foundation\Application app
Artisan Illuminate\Console\Application artisan
Auth Illuminate\Auth\AuthManager auth
Auth (Instance) Illuminate\Auth\Guard
Blade Illuminate\View\Compilers\BladeCompiler blade.compiler
Bus Illuminate\Contracts\Bus\Dispatcher
Cache Illuminate\Cache\CacheManager cache
Config Illuminate\Config\Repository config
Cookie Illuminate\Cookie\CookieJar cookie
Crypt Illuminate\Encryption\Encrypter encrypter
DB Illuminate\Database\DatabaseManager db
DB (Instance) Illuminate\Database\Connection
Event Illuminate\Events\Dispatcher events
File Illuminate\Filesystem\Filesystem files
Hash Illuminate\Contracts\Hashing\Hasher hash
Input Illuminate\Http\Request request
Lang Illuminate\Translation\Translator translator
Log Illuminate\Log\Writer log
Mail Illuminate\Mail\Mailer mailer
Password Illuminate\Auth\Passwords\PasswordBroker auth.password
Queue Illuminate\Queue\QueueManager queue
Queue (Instance) Illuminate\Queue\QueueInterface
Queue (Base Class) Illuminate\Queue\Queue
Redirect Illuminate\Routing\Redirector redirect
Redis Illuminate\Redis\Database redis
Request Illuminate\Http\Request request
Response Illuminate\Contracts\Routing\ResponseFactory
Route Illuminate\Routing\Router router
Schema Illuminate\Database\Schema\Blueprint
Session Illuminate\Session\SessionManager session
Session (Instance) Illuminate\Session\Store
Storage Illuminate\Contracts\Filesystem\Factory filesystem
URL Illuminate\Routing\UrlGenerator url
Validator Illuminate\Validation\Factory validator
Validator (Instance) Illuminate\Validation\Validator
View Illuminate\View\Factory view
View (Instance) Illuminate\View\View

 

موفق باشید 🙂

کار با بیش از یک دیتابیس در لاراول ۵

نوشته‌شده در توسط .

بعضی وقتا نیازه که شما با بیش از یک دیتابیس در ارتباط باشید در لاراول ، مثلا ممکنه برای هر وبلاگی که توی سیستم وبلاگ دهی شما ایجاد میشه یک دیتابیس درست کنید(البته فک نکنم تو این مورد ، این کار معقول باشه) اونجا نیاز هست که در اولین قدم توی فایل config/database.php  کانکشن مربوط به این کار رو ایجاد کنید. بصورت پیشفرض ۴ کانکشن در لاراول ۵ تعریف شده که میتونید شما هم کانکشن دیگه ای برای استفاده تعریف کنید.

تعریف کانکشن برای اتصال به بیش از یک دیتابیس

'mysql2' => [
            'driver'    => 'mysql',
            'host'      => env('DB_EXT_HOST', 'localhost'),
            'database'  => env('DB_EXT_DATABASE', 'db2'),
            'username'  => env('DB_EXT_USERNAME', 'username'),
            'password'  => env('DB_EXT_PASSWORD', 'password'),
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
        ],

توی کد بالا ما کانکشن mysql2  رو تعریف کردیم. دقت داشته باشید که کد بالا باید درون connectios تعریف کنید. همچنین توی ریشه اصلی پروژه و توی فایل .env  هم کانکشن باید مشخص شه… اون فایل رو ادیت کنید و مقادیر دلخواهتون رو اضافه کنید :

DB_EXT_HOST=localhost
DB_EXT_DATABASE=db2
DB_EXT_USERNAME=username
DB_EXT_PASSWORD=password

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

تغییر کانکشن پیشفرض در لاراول

برای اینکه در کل پروژه کانکشن پیشفرض رو تغییر بدیم ، در فایل config/database.php  مقدار ‘default’ => ‘mysql’,  رو به ‘default’ => ‘mysql2’,  تغییر میدیم. در این صورت در کل پروژه شما mysql2 بعنوان کانکشن دیفالت استفاده خواهد شد.

استفاده از یک کانکشن در یک مدل خاص

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

<?php
class SomeModel extends Eloquent {
 
    protected $connection = 'mysql2';
 
}

از این پس تمام اتصالاتی که با مدل بالا به دیتابیس وصل میشه با کانکشن mysql2 خواهد بود.

تغییر کانکشن در کنترلر

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

<?php
 
class SomeController extends BaseController {
 
    public function someMethod()
    {
        $someModel = new SomeModel;
 
        $someModel->setConnection('mysql_2');
 
        $something = $someModel->find(1);
 
        return $something;
    }
 
}

همونطور که میبینید با استفاده از متد setConnection()  این کار شدنیه…

و استفاده در Query Builder :

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

	
$users = DB::connection('mysql2')->select(...);

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

امیدوارم به دردتون خورده باشم 🙂