احسان رضایی

یک توسعه دهنده

نصب افزونه twig در yii2

سلام. صدای من رو از رسپینا نسخه 3 میشنوید :دی

این نسخه رو با نصب افزونه twig در Yii2 افتتاح میکنیم. هر چند من زیاد با template engine موافق نیستم و فکر میکنم مناسب پروژه های کوچیک نیست و صرفه زمانی و اقتصادی نداره. ولی خب به هر حال گاهی وجودش لازمه.

نصب.

دستور زیرُ اجرا کنید:

php composer.phar require --prefer-dist yiisoft/yii2-twig

یا توی فایل کامپوزر قرارش بدین:

"yiisoft/yii2-twig": "~2.0.0"
ادامه...

درس های 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 شماره 21: Bootstrapping

Bootstrapping به فرایندی از آماده کردن محیط قبل از شروع application برای مدیریت یک درخواست اشاره میکنه. به عنوان مثال، اگر تصمیم دارید قبل از اجرای application یکسری تنظیمات خاص برای کاربران تعریف بشه Bootstrapping گزینه ی مناسبی برای این کار هست. backend/components/bootstrap محل خوبی برای نوشتن یک کلاس از این نوع میتونه باشه.

namespace backend\components\bootstrap;

use Yii;
use yii\base\Application;
use yii\base\BootstrapInterface;

class Setting implements BootstrapInterface
{
    public function bootstrap($app)
    {
        $settingModel = \dashboard\modules\setting\models\Setting::find()->one();
        Yii::$app->language = $settingModel->language;
        Yii::$app->timeZone = $settingModel->time_zone;
    }
}

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

app به Application جاری که در حال اجراست اشاره میکنه و با استفاده از اون به همه چیز دسترسی دارید. مثلا تعریف عنوان Application:

$app->view->title = 'my title';

یا اضافه کردن یک فایل css به صفحه و...

$app->view->registerCssFile(Yii::$app->homeUrl . 'web/css/index.css');

در کلاس Setting که به عنوان نمونه کدش رو دیدیم زبان و منطقه زمانی از دیتابیس دریافت و برای کاربر ست میشه. حالا باید مشخص کنیم که این کلاس در مرحله bootstrap اجرا بشه. این یک مرحله قبل از شروع Application هست و در اون متد bootstrap که در کلاس Setting داریم صدا زده خواهد شد. برای این کار به backend/config/main.php مراجعه کنید. در پیکره بندی Application شما یک کلید به نام bootstrap وجود داره، کلاس Setting رو بهش اضافه کنید تا این کار انجام بشه.

'bootstrap' => ['log', 'backend\components\bootstrap\Setting'],

 

درس های yii2 شماره 20: کنترل سطح دسترسی RBAC، استفاده از rule ها

در ادامه مطلب قبلی. با استفاده از rule ها این امکان وجود داره تا به عنوان مثال بتونیم مجوز بروزرسانی یک بخش به شرطی که کاربر جاری مالک(ایجاد کننده) اون باشه رو بررسی کنیم. سیستم مدیریت وبلاگ رو در نظر بگیرید. کاربران(نویسنده ها) وبلاگ فقط باید امکان بروزرسانی یا حذف مطالب خودشون رو داشته باشن. در مرحله ی اول، برای بررسی مالک هر مطلب نیاز به ایجاد یک کلاس جدید داریم. backend\components\rbac میتونه جای خوبی برای ایجاد این کلاس باشه.

<?php
namespace backend\components\rbac;
use yii\rbac\Rule;

class AuthorRule extends Rule
{
    public $name = 'AuthorRule';

    public function execute($user, $item, $params)
    {
    }
}

لازم هست کلاسمون از yii\rbac\Rule مشتق(extends) بشه. و همچنین تعریف متد execute اجباریه. در این متد user شناسه کاربر جاری، item اطلاعات مربوط به مجوز و params پارامتر هایی که ما براش تعریف میکنیم رو برمیگردونه.

ادامه...

درس های yii2 شماره 19: ایجاد extension بدون نیاز به composer و github

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

وارد بخش Extension Generator در ابزار gii بشید. هر بخش رو مختر توضیح میدم.

Vendor Name، به اسم نویسنده اشاره میکنه، username گیت هابتون میتونه گزینه ی خوبی باشه اما اجباری برای نام گذاری وجود نداره من از developit استفاده میکنم به جای نام کاربری گیت هابم.

Package Name، نام extension شماست. بهتره yii2 اولش باشه هر چند اینجا هم اجباری وجود نداره.

Type، عنوان که میتونه extension یا library باشه. ما هم که معلومه داریم چی درست میکنیم.

Keywords، کلمات کلیدی رو با کاما از هم جدا کنید. برای جستجو، دسته بندی و اینطور مسائل مفید هست.

License، مجوز مورد نظر رو انتخاب کنید. هر چند ما قرار نیست چیزی رو به گیت هاب انتقال بدیم اما انتخاب مجوز اجباریه. من GPL-3.0 رو خیلی دوست دارم.

Title, Description, Author Name, Author Email، عنوان، توضیحات، نام و ایمیل خودتون رو بنویسید.

Output Path، مسیری که extension در اونجا قرار میگیره هست. پیشفرض داخل یه temp dir قرارش داده تا بعد از اینکه کارمون روی extension تموم شد اون رو به گیت هاب ببریم و بعدش با composer نصبش کنیم. از اونجایی که قرار نیست ما این روند درست رو طی کنیم این مسیرُ تغییر میدیم. من به جاش vendor/developit@ گذاشتم. دقت کنید در مسیری که میذارید حتما دایرکتوری ها وجود داشته باشن.

Preview رو بزنید و تیک مورد اول یعنی composer.json رو بردارید و روی گزینه ی Generate کیک کنید.

ادامه...

درس های yii2 شماره 17: استفاده از تاریخ و تقویم فارسی

 برای کار با تقویم فارسی در yii2 نیازی به نصب extension ندارید و فقط کافیه formatter رو در محل config/main.php(اگر مثل من از yii2 advanced استفاده میکنید) پیکره بندی کنید. چیزی مثل این نمونه:

'components' => [
    'formatter' => [
        'class' => 'yii\i18n\Formatter',
        'locale' => 'fa_IR@calendar=persian',
        'calendar' => \IntlDateFormatter::TRADITIONAL,
        'dateFormat' => 'php:Y-m-d',
        'datetimeFormat' => 'php:Y-m-d H:i',
        'timeFormat' => 'php:H:i',
    ],
],

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

$formatter = \Yii::$app->formatter;// output: ۱۳۹۶-۰۴-۰۵ ۱۸:۳۵
echo $formatter->asDatetime('now');// output: ۱۳۹۶-۰۴-۰۵
echo $formatter->asDate('now');// output: ۱۴:۰۵
echo $formatter->asTime('now');

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

// ICU format
echo Yii::$app->formatter->asDate('now', 'yyyy-MM-dd'); // ۱۳۹۶-۰۴-۰۵
// PHP date()-format
echo Yii::$app->formatter->asDate('now', 'php:Y-m-d'); // ۱۳۹۶-۰۴-۰۵

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

درس های yii2 شماره 16: کنترل سطح دسترسی، Role Based Access یا RBAC

 مفاهیم پایه

Role Based Access Control یا به طور خلاصه RBAC یک سیستم مدیریت دسترسی هاست که در yii2 گنجانده شده. هر نقش(role) در RBAC شامل مجموعه ای از مجوز هاست یک نقش میتونه به یک یا چند کاربر اختصاص داده بشه. به عنوان مثال نقش manage user(مدیریت کاربران) میتونه شامل مجوز های add user, edit user و delete user باشه. به منظور کنترل سطح دسترسی باید مشخص بشه آیا به کاربر جاری نقش یا مجوز لازم اختصاص داده شده یا خیر.

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

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

  1. کاربران عادی که میتونن مقالات رو بخونن یا مقاله ارسال کنن.
  2. ناظم هایی که میتونن مقالات ارسال شده توسط گروه اول رو ویرایش، تایید و یا حذف کنن.
  3. مدیرانی که میتونن هر کاری انجام بدن از جمله مدیریت کاربران و...

در این مثال برای گروه اول نیازی نیست سطح دسترسی تعریف کنیم و یا اینکه مجوزی مورد بررسی قرار بگیره! چون تمام کاربران باید بتونن مقالات رو بخونن و یا مقاله ارسال کنن.

برای گروه دوم میشه یک نقش تعریف کرد با عنوان managing articles و برای گروه سوم هم که قراره کاربران رو مدیریت کنن نقش managing users رو داریم. نقش ها و مجوز ها باید به صورت سلسله مراتبی تعریف بشن چون گروه سوم یا مدیران ما علاوه بر مدیریت کاربران باید بتونن مقالات رو هم ویرایش، تایید و یا حذف کنن یعنی نقش های گروه دوم رو هم باید داشته باشن پس طرح سلسله مراتبی ما چیزی مثل تصویر زیر خواهد شد:

rbac

ادامه...

درس های yii2 شماره 15: نصب swagger

در ادامه مطلب قبلی.

- داخل packagist عنوان مورد نظرمون(yii2 swagger) رو جستجو میکنیم. مثل همیشه package های زیادی رو مشاهده میکنید. اولین گزینه پر استفاده ترین و محبوب ترین package هست و ما هم اونُ انتخاب میکنیم(light/yii2-swagger).

- برای نصب از طریق composer توضیحات لازم رو داده. من از همون روش اولی که گفته نصب رو انجام میدم یعنی اجرای دستور زیر:

composer require --prefer-dist light/yii2-swagger "~1.0.4" --dev

- داخل یک controller به عنوان مثال SiteController و در متد actions پیکره بندی swagger رو انجام میدیم:

public function actions()
{
    return [
        //The document preview addesss:http://api.yourhost.com/site/doc
        'doc' => [
            'class' => 'light\swagger\SwaggerAction',
            'restUrl' => \yii\helpers\Url::to(['/site/api'], true),
        ],
        //The resultUrl action.
        'api' => [
            'class' => 'light\swagger\SwaggerApiAction',
            //The scan directories, you should use real path there.
            'scanDir' => [
                Yii::getAlias('@api/modules/v1/swagger'),
                Yii::getAlias('@api/modules/v1/controllers'),
                Yii::getAlias('@api/modules/v1/models'),
                Yii::getAlias('@api/models'),
            ],
            //The security key
            'api_key' => 'balbalbal',
        ],
    ];
}

این پیکره بندی شامل موارد زیر میشه:

doc: آدرس صفحه ی مستندات رو مشخص میکنه. با توجه به این نامی که انتخاب کردیم آدرس چیزی شبیه به http://api.yourhost.com/site/doc خواهد شد.

restUrl: آدرس پایه restful api رو تعریف میکنه. به عنوان مثال اگر یک api برای login آماده کنیم درخواست به آدرس http://api.yourhost.com/site/api/login ارسال میشه.

scanDir: مسیر هایی هست که swagger اونها رو برای پیدا کردن api جستجو(scan) میکنه.

api_key: ممکنه api شما نیاز به احراز هویت داشته باشه. در بالای صفحه ی مستندات swagger جایی برای وارد کردن کلید امنیتی وجود داره تا دسترسی ها محدود و امنیت برقرار بشه. به طور پیشفرض اینجا میتونید یک کد امنیتی تعریف و استفاده کنید اما بهتر اینه که کاربران در سیستم login کنن، سپس یک token دریافت و از اون به عنوان کلید امنیتی استفاده کنن. یعنی هر کاربر یک کلید امنیتی منحصر به فرد که با هر بار login تغییر میکنه. بعدا این قسمت رو جدی تر بررسی میکنیم.

درس های yii2 شماره 14: اضافه کردن تگ های SEO

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

به عنوان انجام یک گام کوچیک در جهت بهبود SEO بهتره صفحات متفاوت meta tag های متفاوت و مربوط به خودشون رو داشته باشن.

میدونیم که برای تعریف عنوان یک صفحه(در controller) اینطور باید عمل کرد:

\Yii::$app->view->title = 'my title';

یا بیاییمُ داخل خود view این کارُ انجام بدیم که من این حالتُ بیشتر میپسندم:

$this->title = 'my title';

ولی برای keyword ها یا description مثل title یک پارامتر اختصاصی نداریم و از اونجایی که هر دو meta tag به حساب میان باید از متد registerMetaTag برای ست کردنشون استفاده کنیم.

مثلا داخل controller:

\Yii::$app->view->registerMetaTag([
    'name' => 'description',
    'content' => 'my description',]);\Yii::$app->view->registerMetaTag([
    'name' => 'keywords',
    'content' => 'my keywords',
]);

یا در view:

$this->registerMetaTag([
    'name' => 'description',
    'content' => 'my description',]);$this->registerMetaTag([
    'name' => 'keywords',
    'content' => 'my keywords',
]);

درس های yii2 شماره 11: کنترل سطح دسترسی، Access Control

کنترل سطح دسترسی با احراز هویت framework ادغام شده تا اجازه یا محدود کردن دسترسی ها به امکانات و صفحات یک وبسایت را فراهم کند.

اگر تا کنون از access control استفاده نکرده اید، کد شما به همه اجازه دسترسی را خواهد داد حتی کاربرانی که login نشده اند!

با استفاده از access control در yii2 میتوان مطمئن شد کاربران قبل از دسترسی به امکانات یا صفحات وبسایت login کرده اند.

همچنین yii2 امکان مدیریت پیشرفته تر و پیچیده تری هم با عنوان RBAC ارائه میکند که بعدا بیشتر در مورد آن خواهم نوشت... . با استفاده از RBAC میتوان سلسله مراتب پیچیده ای از مجوز ها تعریف کرد مانند مجوز برای فعالیت هایی که ممکن است در application شما انجام شود.

به طور پیشفرض access control در yii2 دارای دو نقش(roles) میباشد. نقش مهمان یعنی کسی که هنوز login نکرده که با '?' نشان داده میشود و نقش احراز هویت شده یعنی کسی که در سایت login کرده و با '@' مشخص شده است.

با این دو نقش فقط میتوانیم دسترسی به صفحات یا action ها را محدود کنیم بر اساس اینکه کاربر login شده یا خیر و اگر login نبود میتوان آن را به صفحه ی ورود هدایت کرد.

ادامه...

درس های yii2 شماره 10: پیکره بندی nginx برای yii2 advanced

به منظور پیکره بندی nginx برای yii2 مراحل زیر را باید انجام دهید:

1) برای backend پیوند نمادین(symlink) ایجاد کنید.

cd /path/to/project/frontend/webln -s ../../backend/web backend

2) frontend/config/main.php نیاز به تغییر دارد.

....
'components' => [
    ....
    'request'=>[
        'baseUrl'=>'',
    ],
    'urlManager'=>[
        'scriptUrl'=>'/index.php',
    ],
    ....
],
ادامه...

درس های yii2 شماره 9: اضافه کردن application های بیشتر

در قالب advanced به طور پیشفرض frontend از backend جدا شده. با این وجود شاید برایتان کافی نباشد و مثلا نیاز به application دیگری با عنوان blog داشته باشید.

برای اضافه کردن application جدید مراحل زیر را انجام دهید:

1) از frontend کپی گرفته و نام آن را به blog تغییر دهید، این کار را برای environments/dev/frontend و environments/prod/frontend نیز انجام دهید(کپی و تغییر نام به blog).

2) در application جدیدی که ایجاد کردین تمام namespace های frontend را به blog تغییر دهید.

3) در common\config\bootstrap.php کد زیر را اضافه کنید:

Yii::setAlias('blog', dirname(dirname(__DIR__)) . '/blog');

4) در خط فرمان از دستور php init استفاده کنید و فقط توجه داشته باشید که اگر قبلا پروژه را init کرده اید نباید دوباره frontend و backend را initialize کنید(در هنگام init به شما اخطار داده میشود که میتوانید جلوی سوال پرسیده شده در خط فرمان no را تایپ کنید) 

درس های yii2 شماره 8: login و دسترسی به قسمت backend

قبلا در مورد قالب های yii2،  پیکره بندی پایگاه داده و database migration توضیحاتی داده ام که لازم است قبل از مطالعه این درس ابتدا به هر سه موضوع سَری بزنید.

اگر از قالب advanced استفاده میکنید و تصمیم دارید وارد قسمت backend فریم ورک شوید(قسمتی که به طور معمول جهت پیاده سازی بخش مدیریتی پروژه از آن استفاده میشود) متوجه خواهید شد که نیاز به لاگین دارید.

http://localhost/advanced/backend/web/index.php?r=site%2Flogin

در درجه اول شما تا کنون هیچ نام کاربری در پروژه نساختید و حتی اگر بخواهید این کار را انجام دهید(قسمت signup که لینک آن در بخش frontend، منوی بالای صفحه است) با خطای "جدول user وجود ندارد" مواجه خواهید شد.

http://localhost/advanced/frontend/web/index.php?r=site%2Fsignup

برای حل این موضوع و دسترسی به قسمت backend پروژه باید مراحل زیر را طی کنید:

- پیکره بندی پایگاه داده را انجام دهید.

- داخل پروژه ابزار خط فرمان را باز کرده و دستور yii migrate را اجرا کنید. با اجرای این دستور migration مقدار دهی اولیه شده و جدول user هم ساخته خواهد شد.

- روی لینک signup که در منوی بالای قسمت fronend وجود دارد کلیک کنید و یک کاربر جدید بسازید.

- بعد از ایجاد کاربر به طور خودکار login میشود، در همان منو لینک logout و login هم وجود دارد.

درس های yii2 شماره 7: database migration

 در زمان توسعه یک نرم افزار پایگاه داده محور، ساختار پایگاه داده درست مثل سورس نرم افزار توسعه پیدا میکند...

به عنوان مثال، در هنگام توسعه نرم افزار ممکن است به یک جدول جدید نیاز پیدا کنید یا پس از اتمام پروژه و ارائه نسخه ی پایدار آن شاید به این نتیجه برسید که اضافه کردن شاخص(index) به ساختار یک جدول باعث بهبود کارایی نرم افزارتان میشود و...

از آنجایی که معمولا با اینگونه تغییرات باید کمی سورس نرم افزار را هم تغییر دهید yii از database migration پشتیبانی میکند.

migration در yii این امکان را به شما میدهد تا بتوانید یک migrate جدید ایجاد، اعمال، بازگردانی یا اعمال مجدد کنید. نتیجه ی تمام migrate های ایجاد شده تاریخچه ای از توسعه ی دیتابیس شماست که میتوانید ساختار و گاهی محتوای اندکی از دیتابیس را همیشه در کنار نرم افزار خود داشته و به آسانی آن را مدیریت کنید.

تمام این امکانات از طریق خط فرمان(command line) قابل استفاده هستند، میتوانید برای مشاهده توضیحات migration در خط فرمان از دستور

yii help migrate

استفاده کنید.

ادامه...

درس های yii2 شماره 6: تولید خودکار کد با استفاه از Gii

gii ابزاری در yiiframework است که با استفاده از آن میتوان امکانات متداول/رایج وبسایت را به سرعت ایجاد کرد.

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

ایجاد، خواندن، بروزرسانی و حذف(Create, read, update and delete) که به اختصار CRUD نیز خوانده میشود چهار عملکرد اساسی مدیریت داده ها در برنامه نویسی هستند. که ممکن است در همه یا بیشتر بخش های یک وبسایت مورد نیاز بوده و تکرار شده باشند. مانند افزودن یک مطلب، بروزرسانی پروفایل کاربری یا  پیوند جدید و...

gii با تولید خودکار CRUD سعی دارد برنامه نویس را در قسمت های مختلف نرم افزار درگیر مسائل تکراری و زمان بر نکند.

ادامه...

درس های 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 در متد هایی که توسط کاربر نوشته شده به دنبال شناسه مورد نظر خود میگردد تا از آن استفاده کند.

کتاب‌ها

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

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

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

کتاب refactoring / ریفکتورینگ

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

در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.

refactoring یک سرمایه‌گذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینه‌های توسعه نرم‌افزار در آینده خواهد شد.