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

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

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

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

۱۱ مطلب با کلمه‌ی کلیدی «لاراول» ثبت شده است

رفع مشکل The page has expired due to inactivity در لاراول

امیرمسعود ایرانی | شنبه, ۳۰ تیر ۱۳۹۷، ۰۸:۰۲ ق.ظ | ۰ نظر

اگر سایت خود را با لاراول طراحی کرده باشید ممکن است هنگام مشاهده برخی صفحات با پیام «The page has expired due to inactivity» مواجه شوید.

این پیام به دلیل عدم وجود فیلد CSRF در صفحات POST یا سپری شدن مدت مجاز فیلد CSRF نمایش داده می‌شود.

اگر صفحه توسط فرم‌های موجود در سایت خودتان فراخوانی می‌شود، لازم است تا در هنگام ایجاد فرم فیلد CSRF را به صورت زیر در داخل آن قرار دهید:

@csrf

در صورتی که صفحه شما از بیرون سایت به صورت POST فراخوانی می‌شود. برای مثال هنگامی که از درگاه‌های بانکی استفاده می‌کنید و بانک پس از تکمیل فرآیند پرداخت کاربر را به سایتتان هدایت می‌کند، لازم است کنترل CSRF را روی این مسیر حذف نمایید.

چنانچه مسیر پرداخت شما نشانی شبیه آدرس زیر دارد:

http://example.com/pay/20/callback

برای استثنا شدن این مسیر، فایل «app/Http/Middleware/VerifyCsrfToken.php» را باز کنید و متغیر «except» را به شکل زیر ویرایش نمایید:

protected $except = [
    'pay/*'
];
  • امیرمسعود ایرانی

خطای Unable to prepare route در لاراول

امیرمسعود ایرانی | شنبه, ۲۴ تیر ۱۳۹۶، ۰۷:۲۶ ب.ظ | ۰ نظر

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

Unable to prepare route [api/user] for serialization. Uses Closure.

علت رخداد این مشکل، عدم امکان Cache برای مسیرهایی است که از Closure برای پردازش دستورات Route استفاده می‌کنند.

اگر در Routeهای شخصی خود چنین مسیری تعریف نکرده‌اید به احتمال زیاد یکی از Routeهای پیش‌فرض و تستی لاراول در فایل api.php یا web.php چنین مقداری را در خود دارند.

برای اطمینان تمامی فایل‌های موجود در شاخه‌ی routes را باز کنید و مقادیر پیش‌فرض را کامنت کنید. سپس برای ایجاد مسیرهای جدید و دلخواه خود از کنترلرها استفاده کنید تا امکان Cache شدن آن‌ها فراهم شود.

  • امیرمسعود ایرانی

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

امیرمسعود ایرانی | سه شنبه, ۲۳ شهریور ۱۳۹۵، ۰۱:۳۵ ب.ظ | ۰ نظر

فریم‌ورک‌های برنامه‌نویسی مجموعه‌از از دستورالعمل‌ها و کدها آماده هستند که برنامه‌نویسی و طراحی سایت را قابل توسعه، آسان‌تر، سریع‌تر و ایمن‌تر می‌کنند.

یک فریم‌ورک به تنهایی تضمینی برای دستیابی به مزایای فوق نیست، پایبندی به اصول فریم‌ورک و برنامه‌نویسی توسط برنامه‌نویس، نکته‌ی مهم دیگری است که در کنار استفاده از فریم‌ورک‌ها می‌تواند مزایای مورد انتظار را در دسترس قرار دهند.

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

فریم‌ورک‌ها به صورت مستمر در حال بهبود و به‌روزرسانی هستند. در فریم‌ورک‌های مدرن امروزی مانند لاراول، امکان به‌روزرسانی پروژه‌های توسعه یافته با آخرین کدهای فریم‌ورک به آسانی امکان‌پذیر است.

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

توسعه پذیری

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

آسانی توسعه

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

سرعت توسعه

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

ایمنی

توجه به ایمنی و خطرهای در کمین نرم‌افزار و اطلاعات مهم، نیازمند دانش و تجربه‌ی زیادی است. توسعه دهندگان فریم‌ورک به جوانب امنیت آگاهی به مراتب بیشتری نسبت به برنامه‌نویسان کم تجربه دارند. همچنین فریم‌ورک‌ها در گذر زمان توسط هزاران برنامه‌نویس بهبود و تغییر را تجربه می‌کنند تا همیشه با آخرین اصول امنیتی سازگار باشند.


فریم‌ورک‌های شخصی

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

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

  • امیرمسعود ایرانی

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

امیرمسعود ایرانی | شنبه, ۲۶ تیر ۱۳۹۵، ۰۴:۴۴ ب.ظ | ۰ نظر

وابستگی‌های چند ریختی( Polymorphic Relation ) در سیستم‌های ORM نوعی از ارتباط میان دو جدول هستند که تعداد نامحدودی از ردیف‌های جدول دوم به تعداد نامحدودی از ردیف‌های جدول اول مرتبط می‌شوند.

برای مثال تعداد نامحدودی از دانش‌آموزان هر یک می‌توانند در تعداد نامحدودی از کلاس‌ها ثبت نام کنند.

نگهداری ارتباط میان این دو جدول در ساختار پایگاه داده رابطه‌ای( Relational Database ) در یک جدول واسط امکان‌پذیر است.

در لاراول این ارتباط با استفاده از دستور belongsToMany ایجاد و مورد استفاده قرار می‌گیرد.

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

public function Users() {
return $this->belongsToMany( 'User', 'user_lessons', 'lesson_id', 'user_id' );
}
در هنگام استفاده از کد بالا، لازم است که یک جدول واسط با نام user_lessons حاوی دو فیلد lesson_id و user_id تعریف کنیم.

لاراول به صورت پیش‌فرض، تنها فیلدهای شناسه، و این دو فیلد را مقداردهی می‌کند و فیلدهای اضافی مانند فیلد تاریخ در این جدول پر نمی‌شوند.
برای دانستن زمان ثبت نام هر کاربر در هر کلاس، لاراول این امکان را به ما می‌دهد که با تغییراتی در مدل، تاریخ ایجاد و آخرین به‌روزرسانی را نیز در این جدول ثبت کنیم:
public function Users() {
return $this->belongsToMany( 'User', 'user_lessons', 'lesson_id', 'user_id' )->withTimestamps();
}
اضافه شدن دستور withTimestamps به انتهای belongsToMany به لاراول می‌گوید که در هنگام ایجاد ارتباط، تاریخ‌های ثبت و به روزرسانی را نیز مانند سایر جدول‌ها به این ارتباط پیوست کند.

استفاده از فیلدهای تاریخ در هنگام خواندن مقادیر

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

$users = $class->Users()->latest( 'pivot_created_at' )->get();

در کد بالا، ثبت صریح نام فیلد created_at با پیشوند pivot الزامی است. در صوت ننوشتن نام این فیلد یا پیشوند نکردن آن با pivot، اگر جدول کاربران حاوی فیلدی با نام created_at باشد، مشکلاتی از جمله تداخل و خطای نحوی پایگاه داده ایجاد خواهد شد.

  • امیرمسعود ایرانی

آشنایی با Middleware ها در لاراول

امیرمسعود ایرانی | پنجشنبه, ۱۲ فروردين ۱۳۹۵، ۰۳:۳۹ ق.ظ | ۰ نظر

در نگارش 5 از فریم‌ورک لاراول مفهوم جدیدی به نام Middleware ایجاد شده است. در نگارش 4 لاراول مفهومی مشابه به نام فیلتر وجود داشت که عملکردی مشابه با Middleware ها در اختیار برنامه‌نویسان قرار می‌داد.

برای بهبود شیوه‌های برنامه‌نویسی همین طور افزایش کارایی و توسعه‌پذیری، سیستم جدید Middleware جایگزین فیلترها گردید.

عملکرد Middleware قرار گرفتن در مسیر اجرای درخواست‌های رسیده به فریم‌ورک است. Middlewareها می‌توانند درخواست‌های دریافت شده را بررسی کنند و در صورت نیاز اطلاعاتی به آن‌ها بیفزایند، آن‌ها را تغییر دهند یا به طور کلی مسیر اجرا را متوقف و مسیر دیگری هدایت کنند.

پرکاربردترین Middleware که در هسته‌ی لاراول تعبیه شده است، سیستمی برای بررسی ورود کاربر به برنامه است. به این معنی که با اجرای این Middleware در مسیر اجرای تمامی درخواست‌ها، چنانچه کاربر درخواست دهنده، وارد سایت نشده باشد، اجازه‌ی دسترسی به صفحات داخلی به وی داده نمی‌شود و در عوض به صفحه‌ی ورود هدایت می‌شود.

علاوه بر چند Middleware از پیش طراحی شده در لاراول، امکان ایجاد Middlewareهای جدید توسط برنامه‌نویس نیز وجود دارد. همچنین زمان اجرای این واسط‌ها می‌تواند به صورت کلی روی گروهی از مسیرها( Route )ها یا به صورت خاص روی برخی از مسیرها یا به صورت کلی روی تمام مسیرها باشد.

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

php artisan make:middleware AgeMiddleware
Middlewareهای ایجاد شده می‌توانند پیش از اجرای مسیر یا پس از آن فرآیندهای خود را به انجام برسانند. همچنین امکان پیوست کردن چندین Middleware به صورت زنجیره‌ای وجود دارد.

برای اجرای یک Middleware روی تمامی مسیرها می‌بایست فایل زیر ویرایش شود و نام واسط مورد نظر در آن مانند نمونه‌های موجود به آن افزوده شود.
app/Http/Kernel.php

برای استفاده از Middleware روی مسیرهای خاص یا گروه‌های خاصی از مسیرها ابتدا می‌بایست فایل بالا ویرایش شود و برای Middleware جدید نامی مشخص شود.

پس از تعیین نام، به صورت زیر عمل می‌کنیم:


Route::get('admin/profile', ['middleware' => 'auth', function () {
    //
}]);
  • امیرمسعود ایرانی

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

امیرمسعود ایرانی | پنجشنبه, ۳۰ بهمن ۱۳۹۳، ۰۲:۲۰ ب.ظ | ۰ نظر
در لاراول مورد استفاده از مدل‌های خام هنگامی است که بر اساس شرایط مختلف بخواهیم ویژگی‌های مدل را تغییر دهیم و این امکان هم وجود دارد که هیچ شرطی روی مدل اعمال نشود.
برای مثال مدیر مدرسه بدون هیچ شرطی تمامی کلاس‌های موجود را می‌بیند ولی معلم‌ها فقط کلاس‌های مربوط به خود را مشاهده می‌کنند
انجام این کار با تابع query انجام می‌شود. این تابع کوئری ابتدایی را در مدل ایجاد می‌کند. و از این پس می‌توانیم در صورت نیاز شرط‌های دلخواه را به مدل نسبت دهیم.
$classes = ClassModel::query();

if( $teacher == true ) {
	$classes->whereTeacherId( $teacher_id );
}

View::share( 'classes', $classes->get() );
  • امیرمسعود ایرانی

درج حجم اطلاعات زیاد در جدول کاربران لاراول

امیرمسعود ایرانی | دوشنبه, ۲۷ بهمن ۱۳۹۳، ۰۵:۱۶ ب.ظ | ۰ نظر

یکی از شیوه‌های امنیتی برای حفاظت از اطلاعات شخصی کاربران، نگهداری رمزهای آنان به صورت کدشده است. در گذشته الگوریتم‌هایی مانند md5 و sha1 برای این منظور استفاده می‌شدند.

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

در فریم‌ورک لاراول به صورت پیش‌فرض از الگوریتم Bcrypt استفاده می‌شود که الگوریتمی ایمن و با توجه به قدرت سخت‌افزارهای امروزی، تقریبا غیرقابل بازیابی است.

دستیابی به این امنیت بالا، معایبی نیز در کنار خود دارد. یکی از این معایب، هنگامی است که می‌خواهیم، فهرستی طولانی از کاربران را در بانک اطلاعاتی ذخیره کنید و رمزهای هر کاربر را نیز با استفاده از الگوریتم سنگین Bcrypt کدگذاری یا Hash کنیم.

چنانچه تعداد کاربران به حدود چند هزار کاربر برسد، به احتمال زیاد با خطاهای timeout و بار سنگین روی سرور متوقف خواهیم شد.

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

برای حل مشکل بالا، در هنگام رمزگزاری گذرواژه‌ها، به جای استفاده از الگوریتم Bcrypt از الگوریتم قدیمی sha1 که سرعت زیادی دارد و نسبت به md5 نیز امنیت بیشتری برای ما فراهم می‌کند استفاده می‌کنیم.

پس از انجام این کار لازم است تا در بخش ورود به سایت نیز تغییراتی اعمال کنیم. چنانچه ورود کاربر موفقیت‌آمیز نباشد، این احتمال وجود دارد که رمز او هنوز به Bcrypt تبدیل نشده باشد. بنابراین، یک مرحله به الگوریتم قبلی اضافه می‌کنیم تا در صورت عدم موفقیت ورود، رمز کاربر به صورت sha1 نیز با پایگاه داده مقایسه شود، این کار با یک Query ساده قابل انجام است. چنانچه این مرحله با موفقیت به انجام برسد، رمز دریافت شده از کاربر با الگوریتم Bcrypt کد می‌شود و به جای sha1 قبلی ذخیره می‌شود.

مرحله‌ی بعدی نیز تلاش مجدد برای ورود به سایت با الگوریتم Bcrypt خواهد بود که این بار به درستی انجام خواهد شد.

با این روش، بار سنگین پردازش Bcrypt به اولین ورود کاربر موکول می‌شود.

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

  • امیرمسعود ایرانی

Eventهای مدل‌ها در لاراول

امیرمسعود ایرانی | دوشنبه, ۳ شهریور ۱۳۹۳، ۰۵:۰۵ ب.ظ | ۰ نظر

مدل‌های ایجاد شده در فریم‌ورک لاراول امکان فراخوانی Event یا رویدادها را در خود دارند. به این معنی که می‌توانید پیش از رخداد برخی فعالیت‌ها مانند حذف، ایجاد یا ویرایش یک مدل، از آن آگاه شوید و پس از ارزیابی موارد دلخواه اجازه‌ی انجام یا عدم انجام فعالیت مورد نظر را صادر کنید.


در حال حاضر رویدادهای پشتیبانی شده در لاراول فهرست زیر هستند:

creating, created, updating, updated, saving, saved, deleting, deleted, restoring, restored


برای مشاهده‌ی مستندات کامل رویدادهای مدل اینجا کلیک کنید

  • امیرمسعود ایرانی

لاراول چیست؟

امیرمسعود ایرانی | سه شنبه, ۲۸ مرداد ۱۳۹۳، ۰۱:۵۵ ب.ظ | ۲ نظر

برای مشاهد‌ه‌ی فیلم آموزشی نصب لاراول در سایت آپارات اینجا کلیک کنید


لاراول( Laravel ) یک فریم‌ورک php است که توسط تیلور اوتول(Taylor Otwell) توسعه پیدا کرده است. این فریم‌ورک از کتابخانه‌های گوناگونی و به ویژه بسیاری از کتابخانه‌های سیمفونی( Symfony ) استفاده می‌کند.

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

ویژگی‌های بسیاری در لاراول وجود دارند که آن را به انتخاب اول توسعه‌دهندگان تبدیل کرده‌اند.

مهم‌ترین ویژگی لاراول ORM اختصاصی آن به نام Eloquent است. هرچند یادگیری استفاده از این ابزار ممکن است به اندکی زمان نیاز داشته باشد، ولی انعطاف، کارایی و قدرت Eloquent را به ندرت می‌توان در ابزارهای دیگر یافت.

Eloquent کار کردن با اطلاعات را به گونه‌ای آسان می‌کند که باور آن گاهی دشوار به نظر می‌رسد. کدهای نوشته شده با Eloquent شباهت بسیار زیادی با زبان انسان دارند و حتی اگر تا کنون با این شیوه کد ننوشته باشید، معنی کدها را به خوبی متوجه خواهید شد.

Eloquent امکان ذخیره و بازیابی اطلاعات در پایگاه داده‌های مختلف از جمله MySQL، Postgres، و SQL Server را فراهم می‌کند.

لاراول حاوی یک Template Engine اختصاصی به نام Blade است. اگرچه این تمپلیت انجین در مقایسه با ابزارهایی مانند Twig از امکانات کمتری برخوردار است، با این حال تمامی نیازهای معمول را برطرف می‌کند.

لاراول بسیار انعطاف‌پذیر است. تغییر عملکرد بسیاری از بخش‌های آن بدون نیاز به تغییر کدهای اصلی امکان‌پذیر است.

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

لاراول برای مدیریت نیازمندی‌ها از Composer استفاده می‌کند. به‌روزرسانی فریم‌ورک هم با استفاده از همین ابزار صورت می‌پذیرد. به این معنی که با صرف کمترین انرژی، همیشه می‌توانید از آخرین نگارش کتابخانه‌ها و فریم‌ورک لاراول در پروژه‌ی خود بهره ببرید.

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

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


طراحی سایت با لاراول

  • امیرمسعود ایرانی

افزایش سرعت composer در هنگام به‌روزرسانی نیازمندی‌ها

امیرمسعود ایرانی | چهارشنبه, ۲۲ مرداد ۱۳۹۳، ۰۲:۴۵ ب.ظ | ۱ نظر

بسیاری از پروژه‌های برنامه‌نویسی php و از آن جمله پروژه‌هایی که با فریم‌ورک لاراول و سیمفونی توسعه پیدا کرده‌اند، از نرم‌افزار مدیریت نیازمندی‌های composer استفاده می‌کنند.

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

برای رفع این مشکل که به علت نصب بودن افزونه‌ی xdebug روی php به وجود می‌آید می‌توانید مراحل زیر را دنبال کنید

توجه: نصب بودن افزونه‌ی xdebug برای کاهش سرعت کافی است و غیرفعال کردن آن تاثیری در افزایش سرعت ندارد.


فایل php.ini را باز کنید و عبارت zend_extension را که در مقابل آن آدرس فایل php_xdebug-xxx قرار دارد را بیابید. این خط را با قرار دادن یکی نقطه‌ویرگول در ابتدای آن به صورت کامنت در بیاورید.


توجه: در محیط برنامه‌نویسی Wamp یا Xampp از یک فایل php.ini در مسیری غیر از محل نصب php استفاده می‌شود. و برای غیرفعال کردن xdebug در محیط command prompt ویندوز، می‌بایست فایل php.ini که در کنار فایل اجرایی php.exe واقع شده ویرایش شود.


این کار یک مزیت مهم دارد و آن اینکه بدون غیرفعال شدن xdebug در محیط برنامه‌نویسی، می‌توانید سرعت عملکرد composer را افزایش دهید.

  • امیرمسعود ایرانی