Email: me.dev@developit.ir
نمایش ۱ تا ۲۰ مورد از کل ۲۲ مورد.

درس های 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 شماره 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 شماره 13: 14 دلیل برای انتخاب yii framework

هشدار: اگر در حال استفاده از یک فریمورک هستی(هر فریمورکی) و خوشحالی، سرد نشو و اجازه نده مقاله من منحرفت کنه!

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

فراموش نشه هیچ فریمورکی بهترین نیست.

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

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

 

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

درس های yii2 شماره 12: رعایت اصول و سبک کدنویسی

سبک کدنویسی که در نسخه 2 فریمورک و extension های رسمی استفاده میشه دارای اصول، قواعد و قانون های خودش هست. پس اگر تصمیم دارید چیزی به هسته اضافه کنید باید این قواعد رو در نظر بگیرید حتی در غیر این صورت هم رعایت این موارد خالی از لطف نیست و توصیه میکنم این کارُ انجام بدین. در حالی که میتونید راحت باشید، شما مجبور به رعایت این سبک در application خودتون نیستید...

نگاه کلی

به طور کلی ما از سبک PSR-2 استفاده میکنیم و هر چیزی که در این سبک وجود داره اینجا هم هست.

- در فایل ها باید از برچسب های php?> و =?> استفاده شود.

- در پایان هر فایل باید یک خط جدید(newline) داشته باشید.

- encoding فایل برای کد های php باید UTF-8 without BOM باشد.

-  به جای tab از 4 فضای خالی(space) استفاده کنید.

- نام کلاس ها باید به صورت StudlyCaps تعریف شوند.

- ثابت های داخل کلاس تماما باید با حروف بزرگ و گاهی با جداکننده "_" تعریف شوند.

- نام متد ها و پراپرتی ها باید به صورت camelCase تعریف شوند.

- پراپرتی های خصوصی(private) باید با "_" شروع شوند.

- همیشه از elseif جای else if استفاده کنید.

 

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

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

عضویت در خبرنامه
جهت اطلاع از آخرین فعالیت های من لطفا در خبرنامه عضو شوید