آموزش php (وبلاگ یک پی اچ پی کار)

آموزش زبان برنامه نویسی php , html , css , تجربیات یک برنامه نویس

اجرای یک مایگریشن خاص در لاراول 5.8

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

 

php artisan migrate --path=database/migrations/2019_06_12_232454_create_users_table.php
۲۲ خرداد ۹۸ ، ۲۳:۴۱ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

ارسال ایمیل تاییدیه در لاراول 5.8 با روش صف یا queue

برای ارسال ایمیل حاوی لینک تایید در زمان ثبت نام کاربر تغییراتی را در مدل User باید انجام بدید و یکسری از موارد دیگر رو نیز لازم است تا انجام بدید.

وارد مدل User خود شوید و متد زیر را به آن اضافه نمائید :

public function sendEmailVerificationNotification()
{
dispatch(new SendVerificationEmailJob($this));
}

 

البته توجه کنید قبلش یک job برای ارسال ایمیل تاییدیه ایجاد کنید که من ایجاد کردم و اسمشو گذاشتم SendVerificationEmailJob  و سپس وارد job مربوطه شوید و متد handle این کلاس رو به شکل زیر تغییر بدید :

public function handle()
{
$this->user->notify(new VerifyEmailQueued($this->user));
}

 

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

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

<?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;
use Illuminate\Support\Facades\Mail;
use App\Mail\ConfirmEmail;
use App\Notifications\VerifyEmailQueued;

 

class SendVerificationEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

 

protected $user;

 

public function __construct($user)
{
$this->user = $user;
}

 

public function handle()
{
$this->user->notify(new VerifyEmailQueued($this->user));
}
}

 

حالا وارد فایل نوتیفیکیشن میشیم و در کانستراکتور این کلاس مقدار متغییر  user رو دریافت میکنیم 

public function __construct($user)
{
$this->user = $user;
}

سپس متد toMail رو هم به صورت زیر بنویسید :

public function toMail($notifiable)
{
$temporarySignedURL = URL::temporarySignedRoute('verification.verify', \Carbon\Carbon::now()->addMinutes(60), ['id' => $notifiable->getKey()]);
return (new MailMessage)
->subject(sprintf("فعالسازی حساب کاربری"))
->action('فعالسازی حساب کاربری',$temporarySignedURL)
->line('Thank you for using our application!');
}

 

 

 

 

۱۶ خرداد ۹۸ ، ۲۰:۴۶ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

نحوه استفاده از صف در لاراول 5.8

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

همونطور که میدونید بعضی از پروسس ها مثل ارسال ایمیل های اطلاع رسانی یا نوتیفیکیشن ها در وبسایت جزء فرایندهای زمانبر محسوب میشن که اگر بصورت متقارن با مرورگر کاربر این فرایندهارو انجام بدیم ، تجربه خوبی برای کاربر نخواهد بود و ممکن است حتی در طول اجرای پروسس سمت سرور بدلیل موندن کاربر در صفحه سفید انتظار مرورگر ، کلا از سایت ما خارج بشه و مشتری رو از دست بدیم بنابراین لاراول این مشکل رو با صف بندی پروسس ها حل کرده و براحتی میتونید هر پروسسی که اجرا شدنش مستلزم زمانی طولانی است رو در صف قرار بدیم تا لاراول به ترتیب این پروسس هارو در اولین فرصت اجرا بکنه

 

پس بریم باهم این کار رو در لاراول نسخه 5.8 انجام بدیم

 

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

دستور php artisan queue:table را در artisan لاراول اجرا کنید تا مایگریشن مربوطه ساخته بشه و بعد هم مایگریت انجام بدید تا جدول در دیتابیس اضافه بشه

php artisan queue:table

 

گام دوم : تنظیم درایور صف ها در فایل env. به database

QUEUE_CONNECTION=database

 

گام سوم : تعریف یک job

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

برای تعریف یک job می توانید از ابزار کمکی لاراول با نام artisan استفاده کنید و این کلاس رو ایجاد کنید. دستور زیر در محیط cmd تایپ شود :

 
php artisan make:job YourJobName

 

 

گام چهارم : قرار دادن پروسس در متد handle از job تعریف شده

وارد فایل job ایجاد شده در مسیر App\Jobs شوید و دستوراتی که میخواهید اجرا بشن رو داخل متد handle از این فایل قرار بدید:

public function handle()
{
Email_Send($params);
}

همونطور که میبینید ما یک تابع کمکی بنام Email_Send داریم که خودمون در فایل helpers.php خودمون نوشتیم و به عنوان پروسس ما قرار هست اجرا بشه پس در داخل متد handle از job قرارش میدیم.

 

گام پنجم : روشن کردن Listener جهت گوش دادن به درخواست های اجرای job ها

برای اینکار در سیستم local دستور زیر را در artisan  وارد نمائید، البته برای اجرا دستور 

php artisan queue:listen

 

گام ششم : فراخوانی job

حاالا برای اینکه یک job رو برای اجرا در صف قرار بدید از دستور زیر در هر جایی از پروژه که میخواهید job رو اصطلاحاً dispatch کنید استفاده نمائید (البته توجه کنید که در فایلی که دستور فراخوانی job رو می نویسید ، job رو use کنید) :

dispatch(new YourJobName($params));

 

 

۱۶ خرداد ۹۸ ، ۲۰:۲۲ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

نحوه ساخت لینک ارجاع به storage لاراول (symbolic in laravel)

جهت ایجاد لینک ارجاع به مخزن فایل های لاراول یا storage بر روی کامپیوتر لوکال در CMD عبارت زیر رو وارد کنید :

php artisan storage:link
 

و در هاست اشتراکی هم میتونید یک فایل php در مسیری که میخواهید در آنجا لینک بسازید ایجاد کنید و کدهای زیر رو بسته به مسیر مبدا و مقصد درون اون قرار بدید و فایل رو اجرا کنید، به همین راحتی :

 

<?php

 

$targetFolder = dirname(dirname(__FILE__)).'/LaravelFiles/storage/app/public';
$linkFolder = dirname(dirname(__FILE__)).'/myaddondomain.ir/storage';
symlink($targetFolder,$linkFolder);
echo 'Success';

 

?>
۳۰ ارديبهشت ۹۸ ، ۱۹:۳۳ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

بروزرسانی کامپوزر توسط دستورات خودش

جهت بروزرسانی کامپوزر روی سیستم تان در ویندوز 10 وارد CMD شوید و دستور زیر را وارد نمائید:

composer self-update
توجه کنید که یک نسخه از کامپوزر از قبل روی سیستم تان نصب شده باشد.
۲۲ ارديبهشت ۹۸ ، ۱۴:۰۸ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

ایجاد سیستم فالوو و روابط بین جدول کاربران و فالوورها در یک نرم افزار شبکه اجتماعی با لاراول

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

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

 

Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('email');
$table->string('first_name');
$table->string('last_name');
$table->string('password');
$table->string('gender');
$table->rememberToken();
$table->timestamps();
});

 

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

 

Schema::create('followers', function (Blueprint $table) {

 

$table->increments('id');
$table->integer('follower_id')->unsigned();
$table->integer('following_id')->unsigned();
$table->timestamps();
});

 

جدول followers متعلق به جدول users هست و دو تا کلید خارجی داریم داخلش داریم که هر دو به جدول users ارجاع داده شدن ، بنابراین کافیست شما وارد مدل User خودتون بشید که لاراول براتون در مسیر App\User ساخته و دو تا فانکشن زیر رو به آن اضافه کنید :

 

// users that are followed by this user
public function following() {
return $this->belongsToMany(User::class, 'followers', 'follower_id', 'following_id');
}

 

// users that follow this user
public function followers() {
return $this->belongsToMany(User::class, 'followers', 'following_id', 'follower_id');
}

 

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

$userA_object->following()->attach($userB_id);

که کاربر A قصد فالوو کاربر B رو داره و برای برداشتن فالوو هم از دستور زیر استفاده کنید :

$userA_object->following()->detach($userB_id);

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

$a_followers = $a->followers()->get();

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

$a_followers = $a->following()->get();

 

امیدوارم براتون مفید بوده باشه

 

 

۲۲ ارديبهشت ۹۸ ، ۱۰:۳۲ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

خطای Connection could not be established with host smtp.gmail.com [Connection timed out #110]

در صورتی که خطای زیر رو در لاراول موقع ارسال ایمیل دریافت میکنید : 

Connection could not be established with host smtp.gmail.com [Connection timed out #110]

 

میتونید با یه تغییر کوچک در فایل .env مشکل رو حل کنید و حتی سرعت ارسال ایمیل رو هم بالا ببرید:

عبارت زیر رو پیدا کنید :

MAIL_DRIVER=smtp

به مقدار زیر تغییر دهید :

MAIL_DRIVER=sendmail
۲۲ آذر ۹۷ ، ۱۲:۳۳ ۲ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی

دریافت مقدار قبلی و جدید یک ستون خاص در تریگر مای اس کیو ال

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

 

مثال :

OLD.Name

NEW.Name

 

تفاوت این دو عبارت در این است که اولی به مقدار قبلی ستون قبل از تغییرات و دومی هم به مقدار ستون مورد نظر بعد از تغییرات اشاره میکند.

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

 

۲۰ آذر ۹۷ ، ۰۱:۵۳ ۰ نظر موافقین ۰ مخالفین ۰
مهندس مهدی حسامی