احسان رضایی

یک توسعه دهنده، شاید هم نه.

کتاب الگوهای طراحی به بیان ساده(design patterns/دیزاین پترن)

در مهندسی نرم افزار، design patterns(الگوهای طراحی) راه حل‌های قابل استفاده برای مشکلاتی هستند که معمولاً در طراحی نرم‌افزار اتفاق می افتند.

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



درس های yii2 شماره 25: ایجاد خودکار migration از روی پایگاه داده

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

برای این کار(ایجاد خودکار migration از روی پایگاه داده) در درجه اول نیاز به PHP >= 7.1 و Yii >= 2.0.15.1 دارید. داخل composer.json بسته bizley/migration رو اضافه و بروزرسانی کنید.

{
    "require": {
        "bizley/migration": "~3.0.0"
    }
}

برای PHP < 7.1 میتونید از نسخه ی 2.3.0 این بسته استفاده کنید.

{
    "require": {
        "bizley/migration": "~2.3.0"
    }
}

قدم بعدی پیکره بندی هست. ترجیحا داخل پیکره بندی console این کارُ انجام بدین.

'components' => [
    // ...
],
'controllerMap' => [
    'migration' => [
        'class' => 'bizley\migration\controllers\MigrationController',
    ],
],

 

ادامه...

درس های yii2 شماره 24: Array Helper

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

1) getColumn. متد بسیار پر استفاده ای هست مخصوصا اونجایی که یک مدل رو find میکنید. مقادیر یک ستون مشخص در آرایه رو بهتون میده. پارامتر اول آرایه مورد نظر و پارامتر دوم نام ستون هست. 

$array = [
    ['id' => '123', 'data' => 'abc'],
    ['id' => '345', 'data' => 'def'],
];
$result = ArrayHelper::getColumn($array, 'id');
// the result is: ['123', '345']

// using anonymous function
$result = ArrayHelper::getColumn($array, function ($element) {
    return $element['id'];
});
ادامه...

درس های yii2 شماره 23: بهینه سازی SEO با pretty URLs برای صفحه بندی ها

در ادامه مطلب قبلی که به اصطلاح آدرس صفحات رو قشنگشون کردیم! یا به عبارت دیگه اونها رو به شکلی تغییر دادیم که گوگل دوست داره و برای کاربران هم قابل فهم تره میرسیم به صفحه بندی ها که به طور پیشفرض چیزی مثل http://example.com/schools/schoolTitle?page=2 میمونه. تصمیم بر اینه که صفحه بندی به صورت http://example.com/schools/schoolTitle/2 تغییر کنه. فایل پیکره بندی yii رو باز کنید چون لازمه به urlManager یک قانون جدید اضافه کنیم.

$config = [
        // ...
        'urlManager' => [
            // ...
            'rules' => [
              'schools/<title:\w+>/<page:\d+>' => 'site/schools', // new rule
              'schools/<title:\w+>' => 'site/schools',
            ],
        ],
        ....

 میتونید برای مشاهده قانون های بیشتر نگاهی به urlManager رسپینا بندازید.

همین :)

رسپینا، تجربه شیرین اوپن سورس

داستان رسپینا اولین بار برمیگرده به چند سال پیش. قرار بود در انجمن ایران پی اچ پی که هنوز یکی از اعضای اون هستم آموزش پروژه محور داشته باشیم. چه چیزی بهتر و ساده تر از سیستم وبلاگ نویسی؟ به دلیل عدم مشارکت بچه ها پروژه(رسپینا) سال ها عقب افتاد تا زمانی که من yii2 رو برای یادگیری انتخاب کردم. خب چه چیزی بهتر از یک آموزش پروژه محور؟ بنا بر این تصمیم گرفتم رسپینا رو توسعه بدم. در نهایت یک نسخه پر از اشکال مدت زیادی بدون انتشار باقی موند تا اخیرا که دستی به سر و روش کشیدم و گذاشتمش داخل github. ما از ابتدا قرار نبود چرخ رو دوباره اختراع یا یک سیستم با ویژگی های متفاوت ایجاد کنیم. هدف آموزش بود بنا بر این اگر در مورد yii کمی تجربه داشته باشید و نگاهی به سورس بندازید متوجه خواهید شد کار سطح بالا و پیچیده ای انجام نشده. همه چیز ساده و با امکانات پایه خود فریمورک انجام گرفته. برای من همین کافیه تا کسی از روی سورس چیزی یاد بگیره مثل خودم که در گیت هاب از پروژه های دیگران استفاده میکنم.

درس های yii2 شماره 22: بهینه سازی SEO با pretty URLs

گاهی کاربران url های سایت شما رو در شبکه های اجتماعی به اشتراک میذارن. مثلا به طور پیشفرض آدرس صفحه "درباره من" چیزی مثل http://webproject.ru/index.php?r=site%2Fabout هست.

اکثر کاربران هیچ تصوری از index.php یا 2% ندارن و به اون اعتماد نمیکنن در نتیجه کمتر روی لینک کلیک میشه. آدرس هایی مثل http://webproject.ru/about بهتر به نظر میرسه. در واقع کاربران به راحتی میتونن متوجه بشن که قراره چه چیزی رو ببینن. برای تبدیل آدرس ها به نمونه بالا کافیه سه مرحله زیرُ انجام بدین.
یک فایل htaccess بسازید یا اگر از قبل وجود داره موارد زیرُ بهش اضافه کنید(به عنوان مثال محل فایل در نسخه advanced میتونه frontend/web باشه).

RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php

urlManager رو پیکره بندی کنید.

'components' => [
    // ...
    'urlManager' => [
        'class' => 'yii\web\UrlManager',
        // Hide index.php
        'showScriptName' => false,
        // Use pretty URLs
        'enablePrettyUrl' => true,
        'rules' => [
        ],
    ],
    // ...
],

 حالا آدرس ها چیزی مثل http://webproject.ru/site/about شدن. هیچ دلیلی برای وجود پارامتر site داخل url نیست پس با ضافه کردن rule زیر در پیکره بندی بالا اون رو حذف میکنیم.

    'rules' => [
        '<alias:\w+>' => 'site/<alias>',
    ],

 در قسمت rules کارهای بیشتری هم میتونیم انجام بدیم، مثلا اینکه به انتهای url پسوند html. اضافه کنیم. این مورد هم در SEO تاثیرگذار هست. پسوند url رو میتونیم در قسمت suffix مثل نمونه زیر تعریف کنیم.

'rules' => [
    [
        'pattern' => 'user/about/<username:\w+>',
        'route' => 'user/about',
        'suffix' => '.html',
    ],
]

 

درس های yii2 شماره 5: ActiveRecord چیست؟

active record pattern الگوی طراحی‌ای است که معمولاً در نرم‌افزارهایی که از پایگاه‌های دادهٔ رابطه‌ای برای ذخیره داده‌های خود بهره می‌برند به کار می‌رود.

active record pattern روشی برای دستیابی داده‌ها از درون پایگاه داده است. یک جدول پایگاه داده یا نما توسط یک کلاس همپوشانی می‌شود، بنابراین یک نمونه از شی برای یک سطر یکتا در جدول گره می‌خورد. پس از ساخت یک شی، سطر جدیدی به جدول افزوده می‌شود. هر شی‌ای که بارگذاری می‌شود اطلاعات خود را از پایگاه‌داده می‌گیرد. هنگامی که شی‌ای به‌روز می‌شود، سطر متناظرآن جدول نیز به‌روز می‌شود. کلاس همپوشان متدها یا خواص دستیابی برای هر ستون در جدول را پیاده‌سازی می‌کند. این الگو معمولاً توسط ابزارهای پایدار شی یا object persistence tools و در نگاشت رابطه‌ای شی یا object-relational mapping به‌کار می‌رود. معمولاً روابط کلیدخارجی همچون نمونه شی‌ای که دارای نوع مناسب است توسط یک خاصیت نشان داده می‌شوند. پیاده‌سازی active record pattern را می‌توان در فریم‌ورک‌های گوناگون و محیط‌های برنامه‌نویسی بسیاری یافت. برای نمونه، اگر در یک پایگاه‌داده جدولی با نام parts با ستون‌های name (از نوع رشته‌ای) و price (از نوع صحیح) وجود داشته باشد. الگوی active record pattern در کلاسی با نام part پیاده‌سازی می‌شود. این پیاده‌سازی در شبه‌کد زیر چنین است:

part = new Part()
part.name = «Sample part»
part.price = ۱۲۳٫۴۵
part.save()

 شبه‌کد بالا سطر جدیدی را در جدول parts با مقادیر داده شده می‌سازد و تقریباً معادل دستور SQL زیر است:

INSERT INTO `parts` (`name`, `price`) VALUES ('Sample part', ۱۲۳٫۴۵);

 

ادامه...

درس های yii2 شماره 4: پیکره بندی دیتابیس

قبل از پیکره بندی دیتابیس، ابتدا باید مطمئن باشید که اکستنشن pdo در PHP نصب/فعال باشد. این موضوع دقیقا برای PDO driver دیتابیس شما هم صدق میکند.(به عنوان مثال اگر از MySQL استفاده میکنید باید pdo_mysql را هم بررسی کنید تا فعال و قابل استفاده باشد.)

اگر از قالب basic استفاده میکنید config/db.php و اگر با advanced کار میکنید common/config/main-local.php را باز و ویرایش کنید.

'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
'username' => 'root',
'password' => '',
'charset' => 'utf8'

در قالب advanced برای backend یا frontend پروژه میتوان تنظیمات دیتابیس متفاوتی قرار داد، برای این کار کافیست به عنوان مثال در  backend/config/main-local.php داخل components اطلاعات دیتابیس را وارد کرد. اگر چنین اطلاعاتی در مسیر backend/config/main-local.php وجود داشته باشد framework از این پیکره بندی جهت کار با دیتابیس استفاده میکند در غیر این صورت به سراغ common/config/main-local.php خواهد رفت.

 

'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=yii2advanced',
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
        ],
    ...

 به طور معمول برای پیکره بندی از این روش استفاده میشود اما اگر شما نیاز به پیکره بندی خاصی همرا با پارامتر های متفاوتی دارید میتوانید یک نمونه از yii\db\Connection ایجاد و مقداردهی کنید.

درس های yii2 شماره 3: مسیریابی

مسیریابی در yii2 شامل دو مرحله است

- تجزیه درخواست ورودی به مسیر و query parameters

- تناظر یک controller action به مسیر و رسیدگی به درخواست

اصلی ترین واحد یک کنترلر action ها هستند که میتوان با استفاده از آنها به اجرای درخواست کاربران رسیدگی کرد.

 زمانی که از فرمت پیش فرض URL استفاده میکنید، درخواست کاربر به مسیر و یک پارامتر GET به نام r تجزیه میشود.

برای اجرا و رسیدگی به درخواست کاربر باید controller action مشخصی برای مسیر ایجاد کنید.

یک مسیر به وسیله ی کاراکتر "/" به چند قسمت شکسته میشود. به عنوان مثال site/index به دو قسمت site و index شکسته خواهد شد. هر قسمت معادل یک شناسه است که به واحدی منسوب خواهد گشت(یک controller یا یک action).

با شروع از قسمت اول مسیر، framework بررسی میکند آیا چنین شناسه ای در متد actions تعریف شده یا خیر، اگر این شناسه وجود داشت یک شی از آن controller و تنظیماتی که همراه با آن در actions وجود دارد ساخته میشود در غیر این صورت controller در متد هایی که توسط کاربر نوشته شده به دنبال شناسه مورد نظر خود میگردد تا از آن استفاده کند.

درس های yii2 شماره 2: نصب yii framework 2 در ویندوز و لینوکس

1) به صفحه دانلود yii2 برید و با توجه به نیازتون قالب advanced یا basic رو دانلود کنید. (تفاوت قالب advanced و basic در yii framework 2)

2) فایل دانلود شده رو در هاست خود آپلود و از حالت فشرده خارج کنید.

3) وارد پوشه framework بشین و

در ویندوز: 

نرم افزار cmd رو اجرا کنید، init رو تاپیپ و بعدش enter بزنید.

در لینوکس: 

terminal رو اجرا کنید، php init رو تایپ و بعدش enter بزنید.

4) از شما پرسیده میشه که مقداردهی اولیه framework در چه محیطی باشد؟ عدد 0 معادل توسعه و 1 یعنی تجاری. از اونجایی که هدف ما پیاده سازی/توسعه یک نرم افزار جدید هست نه انتشار نهایی آن عدد 0 را تایپ و enter میزنیم. برای اطمینان از انتخاب شما و اینکه اشتباه نکرده باشید باز هم سوالی پرسیده میشود که به عنوان پاسخ yes را تایپ کنید.

 5) اگر همه چیز درست انجام شده باشه باید صفحه خوش آمد گویی yii رو ببینید.

درس های yii2 شماره 1: تفاوت قالب advanced و basic در yii framework 2

قالب advanced:

- دارای دو بخش frontend و backend در application میباشد که به عنوان مثال میتوان از backend برای پیاده سازی بخش مدیریت نرم افزار و frontend جهت قسمت کاربران استفاده کرد

- شامل مدل آماده User و قست هایی همچون ورود، بازگردانی کلمه عبور و ثبت نام است که با استفاده از آن میتوان توسعه قسمت کاربران application را به آسانی و با سرعت بیشتری انجام داد.

پس اگر در حال توسعه نرم افزاری هستین که شامل بخش های مدیریت و کاربران یا قسمت های بیشتری از این قبیل است از advanced استفاده کنید. و اگر تنها به frontend نیازمندید basic را پیشنهاد میکنم.