شما اینجا هستید

با درود. با یکی دیگه از فصل‌های آموزش لاراول به زبان فارسی در خدمت شما عزیزان هستیم. اگر چنانچه فصل ۱ و ۲ این مجموعه آموزشی را مطالعه نکرده‌اید همین الان از منوی بالای صفحه مسیر «آموزش طراحی سایت ->آموزش Laravel» را انتخاب کرده و از ابتدا شروع کنید. چون فرآیند نصب و معرفی لاراول در دو فصل گذشته آموزش داده‌شده است. خب بسیار عالی! وارد فصل ۳ شدیم. مباحث این فصل شامل بحث کنترلرها (Controllers) و مسیریابی یا مسیردهی (Routing) است که این دو مبحث مهم را به صورت کامل از ۰ تا ۱۰۰ توضیح خواهیم داد و تا جاییکه ممکنه سعی کرده‌ایم تمام جزئیات رآموزش دهیم.

مقدمه

بسیاری از توابع کاربردی در هر نرم‌افزار تحت وب که با فریم‌ورک نوشته می‌شود دریافت درخواست از کاربر و ارسال پاسخ است که معمولا توسط پروتکل‌های HTTP یا HTTPS صورت می‌پذیرد. این بدین معنی‌ست که طراحی مسیرهایی که کاربر وارد آن می‌شود و درخواستی برای سرور ارسال می‌کند بسیار مهم و از اصلی‌ترین و اولین مقدمه‌ی هر نرم‌افزار تحت وب است. بگونه‌ای که بدون مسیرها (Routes) نرم‌افزار شما هیچ قابلیتی نخواهد داشت. در ادامه به توضیح دقیق نحوه‌ی تعریف مسیرها و همچنین کنترل آنها توسط فریم‌ورک قدرتمند لاراول می‌پردازیم.

تعریف مسیر (Route)

در لاراول ۵.۴ مسیرها (Routes) در پوشه‌ی routes تعریف شده‌اند. البته در نسخه‌های قبلی این مسیر به صورت app/Http/routes.php بود. ساده‌ترین راه‌ برای تعریف یک مسیر انطباق یک URI‌ مانند “/” به یک Clouser‌ (بستار) است:

یک سوال: URI چیست؟
پاسخ: URI‌ به مجموعه‌ی URLها و URN ها گفته می‌شود. برای روشن‌تر شدن این موضوع یک مثال خیلی مشخص می‌زنیم:

تعریف URI:‌ هر آدرسی که منبع مشخصی نداشته باشد. (مثل آدرس درایو‌ها در ویندوز و …) به نمونه‌ی زیر توجه کنید:

Files/main/page.html 

تعریف URL:‌ هر آدرسی که دارای منابع باشند مانند منبع http, https و ftp و … . (مثل آدرس وب سایت‌ها و …) به نمونه‌ی زیر توجه کنید:

http://www.puyapardaz.ir/laravel/page.html

تعریف URN:‌ هر آدرسی که منبع آن یک نام باشد. (مثل بارکد کتاب‌ها و …) به نمونه‌ی زیر توجه کنید:

ISBN 1-2345-678-9

نکته قابل توجه:‌ هر URL می‌تواند یک URI‌ باشد و هر URN نیز مجددا می‌تواند یک URI‌ باشد ولی هیچگاه یک URL‌ نمی‌تواند یک URN باشد یا بالعکس.

یک سوال: Clouser چیست؟
پاسخ: توابعی هستند که عنوان شیء، پارامتر و متغییر به سایر توابع، متدها یا رویدادها ارسال می‌شوند.

حال که با تعاریف Clouser و URI آشنا شدید اولین مثال لاراولی خود را ارائه داده تا شما را با مسیردهی لاراول آشنا کنیم. بنابراین مسیر routes/web.php را باز کرده و دستورهای موجود در آن را به حالت غیرفعال (کلید میانبر /+ctrl) درآورده و کدهای زیر را اضافه کنید:

Route::get("/",function(){
    return "Hello puyapardaz";
});

این دستور به سیستم مسیردهی لاراول فرمان می‌دهد که هر گاه کاربر مسیر /http://www.puyapardaz.ir را وارد کرد پیغام Hello puyapardaz را نمایش دهد. یا به اصطلاح هرگاه کاربر مسیر روت اصلی وب سایت را مشاهده کرد پیام موردنظر چاپ شود. شاید این سوال برای شما پیش بیاید که چرا بجای استفاده از Echo یا Print‌ از دستور return برای نمایش رشته‌ها استفاده کردیم. نکته قابل توجه این است که درخواست‌ها و پاسخ‌های کاربران از یک کانال به نام MiddleWare یا میان‌افزار عبور می‌کنند و سپس به کاربر بازگردانده می‌شوند. بنابراین دستور return‌ مستقیما به کاربر ارسال نمی‌شود. بلکه از فیلتر میان‌افزار یا MiddleWare می‌گذرد.

همچنبن توجه داشته باشید که در فایل web.php و یا هر فایل Route دیگری می‌توان چندصد Route‌ تعریف کرد. به مثال زیر توجه کنید:

Route::get('/', function () {
    return view('welcome');
});
 
Route::get('about', function () {
    return view('about');
});
 
Route::get('products', function () {
    return view('products');
});
 
Route::get('services', function () {
    return view('services');
});

فراخوانی استاتیک (ساکن)

اگر شما تجربه‌ی برنامه‌نویسی به زبان PHP را داشته باشید، شاید از نحوه‌ی فراخوانی استاتیک متدها (مثلا متد get) در کلاس‌ها (مثلا کلاس ::Route) حیرت‌زده باشید. ولی در حقیقت این متدها Static نیستند بلکه لاراول از مفهومی به نام Facade استفاده می‌کند. به عنوان نمونه اگر شما مثال اول را با بدون Facade بنویسید به صورت زیر خواهد بود:

$router->get('/', function(){
    return 'Hello puyapardaz';
});

یک سوال: Facade چیست؟
پاسخ: یک Interface است که وابستگی‌های خارجی یک کلاس را به حداقل رسانده و باعث خواناتر شدن کد‌ها و برنامه‌ها می‌شود.

متدهای مسیردهی (Route)

لاراول با استفاده از Facade مسیردهی (::Route) تمام متدها را به زیباترین شکل ممکن پشتیبانی می‌کند. متدها به شرح زیر می‌باشند:

  • ()Route::get : متدی برای خواندن صفحات
  • ()Route::post : متدی برای ایجاد و ذخیره اطلاعات
  • ()Route::put : متدی برای آپدیت و بروزرسانی اطلاعات
  • ()Route::delete : متدی برای حذف اطلاعات

کنترل کردن مسیردهی

همانطور که در جریان هستید شکل ظاهری استفاده از Closure ها مناسب یک وب اپلیکیشن قدرتمند نیست چون بعدها فرمان‌ها گسترش پیدا کرده و صفحه‌ی Route ما بسیار ناخوانا خواهد شد. یک راه معمول برای مسیردهی استفاده از نام کنترلر‌ها برای تعریف مسیردهی است:

 	
Route::get('/', 'WelcomController@inedx');

این عبارت و دستور در واقع درخواست را به آدرس URI‌ که معادل App\Http\Controllers\WelcomeController و در نهایت متد ()welcome ارسال می‌کند. این متد دقیقا مشابه یک Clouser در مثال‌های بالاست.

پارامترهای مسیردهی (Route)

اگر داخل URI‌ یک پارامتر وجود داشته باشد می‌توان آن را مستقیما به Clouser یا متد ارسال کرد. به مثال زیر توجه کنید:

Route::get('users/{id}/friends', function ($id) {
    //
});

همچنین می‌توان از پارامترهای پیشفرض استفاده کرد. به عنوان مثال پارامتر پیشفرض id$ در مثال فوق برابر fallbackId است:

Route::get('users/{id?}', function ($id = 'fallbackId') {
	//
});

و می‌توان از عبارات باقاعده (Regular Expression) استفاده کرد. این عبارات مانند یک شرط عمل می‌کنند بدین صورت که اگر شرط برقرار باشد Route مخصوص به آن اجرا می‌شود:

Route::get('users/{id}', function ($id) {
	//
})->where('id', '[0-9]+');
 
Route::get('users/{username}', function ($username) {
	//
})->where('username', '[A-Za-z]+');
 
Route::get('posts/{id}/{slug}', function ($id, $slug) {
	//
})->where(['id' => '[0-9]+', 'slug' => '[A-Za-z]+']);

برای خروجی فوق اگر کاربر آدرس users/abc را وارد کند route دوم اجرا خواهد شد و اگر عبارت posts/abc/123 در مرورگر وارد شود Route اول اجرا خواهد شد.

اسامی مسیرها (Route)

در حالت پیش‌فرض می‌توان با استفاده از تابع ()url‌ هر جای نرم‌افزار خود از مسیردهی ها استفاده کنید. به عنوان مثال:

<a href="<?php echo url('/'); ?>">

اما لاراول برای شما امکانی را فراهم کرده است که برای هر Route‌ یا مسیر خود یک نام دلخواه انتخاب کرده تا در صورت لزوم مسیرهای پیچیده را با نام اختصاری آنها معرفی کنید. به مثال زیر توجه کنید:

Route::get('members/{id}', [
	'as' => 'members.show',
	'uses' => 'MembersController@show'
]);
 
// فایل View
<a href="<?php echo route('members.show', ['id' => 14]); ?>">

در این مثال به برخی مفاهیم باید اشاره کرد. اولین مبحث تخصیص آرگومان دوم به شکل آرایه به متد get در سیستم مسیردهی Route است. لاراول آرگومان دوم Route را چک می‌کند و اگر Clouser بود آن را به صورت هوشمند اجرا می‌کند یا اگر رشته باشد آن را به عنوان یک معرف کنترل و متدهای همراه آن، می‌شناسد یا در صورت وجود یک آرایه (مانند مثال فوق) لاراول انتظار دریافت پارامترهایی دارد تا بتواند روی سیستم مسیردهی اعمال کند. پس در زیر به صورت خلاصه و تیتروار انواع پارامترهایی که به عنوان آرگومان دوم به Route و متدهای مرتبط به آن ارسال می‌شوند را بررسی می‌کنیم:

  1. Clouser، که در لحظه اجرا می‌شود
  2. String یا رشته، به کنترلر مربوطه و متد آن اشاره می‌کند
  3. Array‌ یا آرایه، تنظیمات روتر را درنظر می‌گیرد و سپس به کنترلر موردنظر و متد آن اشاره می‌کند

همانطور که در مثال فوق مشاهده می‌کنید یک نام مستعار برای این مسیردهی (route) تحت عنوان members.show اختصاص داده شده است. که این نام‌گذاری از یک قاعده و قانون کلی تبعیت می‌کند که توسط لاراول ایجاد شده است. این قانون بدین صورت است: resourcePlural.action، یعنی قسمت اول نام کنترلر به صورت جمع و camel-case است و قسمت دوم نام اکشن یا متد.

بنابراین با استفاده از ویژگی (Property)تحت عنوان “as” نام این روت (route) یا مسیر را “members.show” قرار داده ایم. سپس با استفاده از ویژگی “uses” نام کنترلر مربوطه را به این مسیر معرفی کرده‌ایم.

در نظر داریم که اختصاص نام مستعار مسیر برای یک Coluser امکان‌پذیر است. به مثال زیر توجه کنید:

Route::get('/members/{id}/edit', [
	'as' => 'members.edit',
	function ($id) {
		//
	}
]);

بسیار عالی! حال به معرفی توابع موردنیاز برای لینک دادن به این مسیرها، اشاره می‌کنیم. این توابع معمولا در view مورد استفاده قرار می‌گیرد:

()url

این تابع و متد زمانی استفاده می‌شود که روت‌ها پارامتری نداشته باشند. به عبارت دیگر نام مستعاری برای آنها تعریف نشده باشد.

()route

این تابع زمانی استفاده می‌شود که روت و مسیر ما دارای نام مستعار باشد و یا پارامتری برای آن تعریف کرده باشیم.

یک مثال جامع برای مبحث پارامترهای Route ارائه می‌دهیم تا این مبحث رو به اتمام برسانیم:

درنظر بگیرید که شما آدرسی به صورت زیر دارید:

users/{userId}/comments/{commentId}

حال می‌خواهیم برای userId=1 و commentsId=2، انواع پارامترها را به همراه کاربرد آنها در View‌ نمایش دهیم:

Route::get('users/{userId'}/comments/{commentId}, [
    'as' => 'users.comments.show',
    'uses' => 'UsersCommentsController'
]);
===================================
حالت ۱:
    route('users.comments.show', [1, 2])
    خروجی: // http://www.puyapardaz.ir/users/1/comments/2
===================================
حالت ۲:
    route('users.comments.show', ['userId' => 1, 'commentId' => 2])
    خروجی: // http://www.puyapardaz.ir/users/1/comments/2
===================================
حالت ۳:
    route('users.comments.show', ['commentId' => 2, 'userId' => 1])
    خروجی: // http://www.puyapardaz.ir/users/1/comments/2
===================================
حالت ۴:
    route('users.comments.show', ['userId' => 1, 'commentId' => 2, 'opt' => 'a'])
    خروجی: // http://www.puyapardaz.ir/users/1/comments/2?opt=a

گروه‌‌بندی مسیرها (Route Groups)

گروه‌بندی مسیرها یکی از امکانات فوق‌العاده‌ای‌ست که لاراول در اختیار شما قرار می‌دهد تا از تکرار یک سری پسوند و فضای نام‌ها (namespace) خودداری نمایید. همچنین از این گروه‌بندی‌ها برای اعمال برخی کامپوننت‌های امنیتی و تایید هویت کاربری (authentication) بر روی یک دسته مسیر (routes) استفاده می‌شود. این امر از تکرار بسیاری از route ها جلوگیری می‌کند و مسیردهی اپلیکیشن شما را بسیار منظم و مرتب می‌کند.

برای تعریف کردن یک یا چندین گروه باید از متد group به صورت زیر استفاده کنید:

Route::group([], function () {
	Route::get('hello', function () {
		return 'Hello';
	});
	Route::get('world', function () {
		return 'World';
	});
});

مثال بالا هیچ فرقی با حالت route عادی ندارد. زیرا مقدار آرگومان اول group‌ نباید هرگز خالی باشد.

گروه‌بندی با استفاده از Middleware

همانطور که قبلا اشاره کردیم، میان‌افزارها (Middleware) را می‌توان به عنوان یک فیلتر و با استفاده از عبارت group یا Route::middleware به مسیردهی خود اضافه کنیم. به مثال زیر توجه کنید:

Route::group(['middleware' => 'auth'], function () {
	Route::get('dashboard', function () {
		return view('dashboard');
	});
	Route::get('account', function () {
		return view('account');
	});
});

در این مثال میان‌افزار تایید هویت (authentication) به مسیرهای http://www.puyapardaz.ir/dashboard و http://www.puyapardaz.ir/account‌ اعمال شده است که باعث می‌شود کاربر بدون ورود و عضویت نتواند وارد بخش‌های داشبورد و اکانت شود.

گروه‌بندی با استفاده از پسوندها

گاهی نیاز داریم که برای نرم‌افزار خود یک API تولید کنیم و آن را در اختیار سایر افراد قرار دهیم در این صورت باید مسیر API‌ به صورت http://www.puyapardaz.ir/api/help باشد. حال برای اینکه مسیر api/ را مدام تکرار نکنیم از یک پسوند استفاده کرده و مسیرهای درون آن را گروه‌بندی می‌کنیم. این مفهوم را با مثال زیر شفاف‌تر توضیح می‌دهیم:

Route::group(['prefix' => 'api'], function () {
	Route::get('/', function () {
		//
	});
	Route::get('help', function () {
		//
	});
});

در این حالت همانطور که مشاهده می‌کند پسوند api/ به تمام زیر گروه‌ها اضافه می‌شود.

گروه‌بندی برای ساب دامین

این امر همانند پسوند دادن به نرم‌افزار است با این تفاوت که ساب دامین را به عنوان یک پسوند به مسیرها اعمال می‌کنیم. مثال زیر را مشاهده کنید:

Route::group(['domain' => 'api.puyapardaz.ir'], function () {
	Route::get('/', function () {
		//
	});
});

گروه‌بندی برای فضای‌نام‌ها

برای کنترلرهایی که فضای‌نام (namespaces) مشترکی دارند می‌توان مسیردهی را گروه‌بندی کرد. در مثال زیر کنترلرهای موجود در فولدر API با فضای نام تعیین شده دیگر تکرار نخواهند شد:

// بدون اعمال کردن namespace
// App\Http\Controllers\ControllerA
Route::get('/', 'ControllerA@index');
 
// همراه با اعمال namespace
Route::group(['namespace' => 'API'], function () {
	// App\Http\Controllers\API\ControllerB
	Route::get('/', 'ControllerB@index');
});

گروه‌بندی کردن نام‌های مستعار

از این نوع گروه‌بندی برای جلوگیری از تکرار URI از نام‌های مستعار استفاده می‌کنیم. بنابراین عبارت users/comments/5 توسط یک نام مستعار مشابه users.comments.show نمایش داده خواهد شد. به مثال زیر دقت کنید:

Route::group(['as' => 'users.', 'prefix' => 'users'], function () {
	Route::group(['as' => 'comments.', 'prefix' => 'comments'], function () {
		Route::get('{id}', ['as' => 'show', function () {
			//
		}]);
	});
});
 
// در نهایت کل این مسیر در خروجی با عبارت:
//users.comments.show‌ 
// در دسترس است.

به شما تبریک می‌گوییم، با آموزش فوق شما به راحتی می‌توانید مسیردهی‌های وب اپلیکیشن خود را ایجاد کرده و در نهایت امر به تولید یک محصول کارآمد و بدون نقص بپردازید. مسیردهی (routing) به شما کمک می‌کند تا نرم‌افزاری تمیز و بدون نقص ایجاد کرده تا در صورت امکان در برهه‌ای از زمان بتوانید آن را بروزرسانی کنید و دچار سردرگمی نشوید! در جلسه‌ی آینده به توضیح مفصل کنترلرها می‌پردازیم. با ما همراه باشید.

دیدگاه‌ها

women viagra prank d and bnationturns to something else is viagra government funded cialis vs viagra husband viagra erection cost of viagra 100mg walmart

generic viagra 100mg sildenafil viagra dosage recommendations cialis vs viagra viagra without a doctor prescription your mama so ugly even her dildo needs viagra

https://pharm-usa-official.com - cialis vs viagra

http://cratcoruna.com/los-jovenes-toman-protagonismo/?unapproved=206091&...
https://timesofksk.com/actress-anupamaparameshwaran-hd-photos-wallpapers...
https://cocosolis.com/ro/easter-eggs-natural-dyes/?unapproved=131355&mod...
https://www.kortnimarie.com/2015/02/11/casa-lantana-wedding-anthony-dana...
https://lcfwines.com/goosecross-october-01-2014137-2/?unapproved=208357&...

which is better - cialis or viagra herbal replacement for viagra/cialis/levitra... viagra pills ingredient in viagra viagra 100mg price walmart

step sister viagra sister gives brother viagra viagra samples generic viagra online nizagara vs viagra

https://viagrnetwork.com/# - viagra dosage

Informative article, exactly what I was looking for. https://tylenol1st.com/

quick loans online quick and loans odds to win 2017 quick loan student quick loans kenya quick loans online

quick loans bad credit with monthly payments private lenders funding quick loans no collateral no up front fees no vredit checks quick loan quick loans in south carolina quick online payday loans

personal loans quick quick loans for bad credit same day quick loans quick pay payday loans quick safe loans

quick loans deposit same day quick loans online direct deposit quick loans quick online loans how to pay student loans quick

quick loans albany ga quick loans under 500 quick loan quick loans dayton blvd quick online loans

quick loans in south carolina quick personal loans online quick loans cash loans quick ways to get quick loans

https://paydailoanz.com/# - quick loans

quick lapp for sba loans quick cash loans incorp huntington park ca quick loan ways to get quick loans quick online loans direct lender

quick and loans odds to win 2017 www.american.bank/loans#loan-quick-pay quick loan quick pay payday loans quick lapp for sba loans

https://paydailoanz.com/# - quick loan

online quick approval installment loans quick business loans for startup quick loan how to pay student loans quick quick small loans online

advance cash fast in loans online payday quick until bad credit loans quick approval quick loans quick loans in south carolina private lenders funding quick loans no collateral no up front fees no vredit checks

https://paydailoanz.com/# - quick loan

quick loans direct personal loans quick quick loan quick and loans rates get quick loans in usa

quick pay payday loans new york state threatens to garnish quick loans rates quick loans quick loans no credit check near me quick safe loans

https://paydailoanz.com/# - quick loans

make money make money from home make money make money taking surveys how to make money at home

how to make money as a teen where did nancy pelosi make her money work from home easy ways to make money online how to make money on the internet

https://make-money-blogs.com/# - work from home

make money now best way to make money make money how to make extra money ways to make money fast

how to make money on youtube make money online surveys work from home how to make money on instagram how to make money

https://make-money-blogs.com/# - make money

ways to make extra money how to make money as a kid work from home how to make money with a website ways to make money at home

hobbies that make money how much money can you make on youtube make money how to make money best way to make money online

https://make-money-blogs.com/# - make money

make money on youtube how can i make money work from home how do you make money on youtube apps to make money

diy crafts that make money make money online surveys make money how to make money on instagram apps to make money

https://make-money-blogs.com/# - make money

buy hydroxychloroquine https://azhydroxychloroquine.com/

how to make more money how did george soros make his money make money how does venmo make money how do you make money on youtube

how to start a blog and make money how to start a blog and make money work from home how to make money on instagram how much money can you make on youtube

https://make-money-blogs.com/# - work from home

how to make money on youtube how much money can you make on youtube work from home make real money online how to make money on amazon

how did tom steyer make his money homemade items that make money work from home how does robinhood make money easy ways to make money online

https://make-money-blogs.com/# - make money

natural viagra levitra vs viagra [url=https://viatribuy.com/#]how long does viagra last[/url] https://viatribuy.com/

ciprofloxacin hcl 500 mg ciprofloxacina buy ciprofloxacin [url=https://ciprofloxacin.confrancisyalgomas.com/#]ciproxin 500[/url] https://ciprofloxacin.confrancisyalgomas.com/

best way to make money make money online fast work from home best ways to make money make money on the side

make extra money make money online free work from home how to make money fast how to make money selling drugs

https://make-money-blogs.com/# - make money

legitimate ways make extra money how to make money as a kid make money how to make money on amazon how can i make money

ways to make money on the side how much money does pewdiepie make work from home how to make money blogging how to make fast money

https://make-money-blogs.com/# - work from home

how to make money at home make money on youtube make money make extra money how to make fast money online

how to make money without a job easy way to make money make money how to make money without a job how do youtubers make money

https://make-money-blogs.com/# - work from home

best ways to make money online ways to make extra money make money how to make money on amazon how to make money online fast

how to make money on instagram make money at home work from home how much money can you make on disability how to make money on youtube videos

https://make-money-blogs.com/# - work from home

make money online from home how to make money on youtube make money legitimate ways make extra money how did george soros make his money

how does venmo make money make money now make money make money blogging how to make money on instagram

http://promz5.ru/ - make money

legitimate ways make extra money money make make money imgclick will easily make money sharing photos friends social free file upload easy way to make money

ways to make money online best way to make money make money money make make money online surveys

http://super-movies.ru/ - work from home

how to make money on amazon how to make money on amazon work from home how did jerry jones make his money how does robinhood make money

make money now how to make money on youtube videos work from home legit ways to make money online make extra money from home

https://mdubibi.ru/ - make money

how much money do youtubers make how to make money with bitcoin work from home make money apps make money blogging

how did george soros make his money apps to make money make money make real money online how to make money on youtube videos

https://visuzodog.ru/ - make money

buy hemp oil buy cbd oil cbd oil cbd gummies https://cbdoilwalmart.com/ - buy cbd oil

cbd gummies cbd cream buy hemp cbd oil https://cbdoilwalmart.com/ - cbd vape

cbd drops buy hemp oil cbd drops

where to buy hydroxychloroquine https://hydroxychloroquine1st.com/

generic viagra soft tabs http://viacheapusa.com/

sykes work at home what is passive income arise work from home how to make money on instagram legitimate work at home companies

smart passive income work from home data entry [url=https://make-money-blogs.com/# ] work from home companies[/url] how much money can i make on social security make money from online

https://make-money-blogs.com/# - work at home companies

how to make money fast make money online fast online poker real money making money with pornhub online money

money making apps fifth harmony work from home [url=https://make-money-blogs.com/# ] how does facebook make money[/url] make money online how to make passive income

https://make-money-blogs.com/# - make money online free

symptoms of coronavirus in cats canine coronavirus symptoms novel coronavirus coronavirus genome feline coronavirus diarrhea

coronavirus vaccine schedule coronavirus in dogs [url=https://pharm-usa-official.com/coronavirus/# ] Buy Coronavirus Treatments[/url] coronavirus mers is coronavirus contagious

https://pharm-usa-official.com/coronavirus/# - respiratory coronavirus

makw money online how did jerry jones make his money how to make money online fast make money online fast earn money online

how much money do youtubers make best ways to make money online [url=https://make-money-blogs.com/# ] free money online[/url] sykes work at home work from home

https://make-money-blogs.com/# - fifth harmony work from home

online surveys for money work at home jobs legitimate how did jerry jones make his money how does robinhood make money make money online from home

make money fast work at home jobs [url=https://make-money-blogs.com/# ] best way to make money online[/url] legitimate work at home companies making money from home

https://make-money-blogs.com/# - how to work from home

coronavirus cats coronavirus cat respiratory coronavirus coronavirus genome is coronavirus contagious

coronavirus vaccine schedule coronavirus structure [url=https://pharm-usa-official.com/coronavirus/# ] coronavirus test[/url] coronavirus in babies human sars coronavirus

https://pharm-usa-official.com/coronavirus/# - coronavirus in cattle

work from home jobs best work from home jobs runescape money making makw money online runescape money making

how to make money online make money from home [url=https://make-money-blogs.com/# ] home work[/url] how to make money on youtube passive income opportunities

https://make-money-blogs.com/# - smart passive income

smart passive income online surveys for money walmart money transfer online make money from home how to make extra money

how does robinhood make money part time work from home [url=https://make-money-blogs.com/# ] what is passive income[/url] how to make quick money what is passive income

https://make-money-blogs.com/# - runescape money making

honey boo boo weight loss apple cider vinegar weight loss drink keto weight loss essential oils for weight loss weight loss foods

instagram restrict weight loss yoga for weight loss [url=https://weight-loss-blogs.com/# ] meal plan for weight loss[/url] weight loss foods meal replacement shakes for weight loss

https://weight-loss-blogs.com/# - best weight loss diet

cialis online

[url=https://wowcialisnow.com/# ] buy cialis online[/url]

https://wowcialisnow.com/# - cialis online

optivia weight loss nathan fillion weight loss meal plan for weight loss weight loss shakes weight loss meal plans

protein shakes for weight loss chrissy metz weight loss [url=https://weight-loss-blogs.com/# ] best weight loss pill[/url] precious weight loss honey boo boo weight loss

https://weight-loss-blogs.com/# - celine dion weight loss

buy ventolin https://amstyles.com/

صفحه‌ها

افزودن دیدگاه جدید

دیدگاه

  • تگ‌های HTML مجاز: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • خطوط و پاراگراف‌ها بطور خودکار اعمال می‌شوند.
  • نشانی صفحه‌ها وب و پست الکترونیک بصورت خودکار به پیوند تبدیل می‌شوند.

Plain text

  • تگ‌های HTML مجاز نیستند.
  • نشانی صفحه‌ها وب و پست الکترونیک بصورت خودکار به پیوند تبدیل می‌شوند.
  • خطوط و پاراگراف‌ها بطور خودکار اعمال می‌شوند.
كد امنيتي
این پرسش برای جلوگیری از ارسال اسپمهای اتوماتیک است.