آموزش Yii آموزش بخش های مختلف قسمت پنجم

در این جلسه هم بخش های دیگر و فایل های مهم و اصلی در Yii را آموزش می دهیم.

دومین فایل مهم که باید بررسی گردد فایل web.php در پوشه ی config می باشد، این همان فایلی است که شامل یک آرایه بزرگ می باشد و برای اعمال تنظیمات به سازنده کلاس  Application در فایل index.php پاس داده می شود:

$application = new yii\web\Application($config);

در این فایل تنظیماتی از قبیل تنظیمات ایمیل و بانک داده و ….  نوشته می شود، اما طبق یک قانون مشخص! در ابتدا در نوع پروژه basic تنظیمات مربوط به بانک اطلاعاتی در فایل وجود ندارد، پس باید به آن اضافه گردد، ما شروع به بررسی خطوط داخل این فایل می کنیم:

$params = require(__DIR__ . '/params.php');

در این خط از فایل مشاهده می شود که فایل params.php صدا می شود و داخل متغییر $params ریخته می شود، اگر فایل params.php را مشاهده کنیم می بینیم که یک آرایه در داخل فایل وجود دارد و  آن نیز return شده است، در کل میشه اینطور گفت که اگر بخواهیم مقداری را بین صفحات به صورت پارامتر جابجا کنیم باید در این فایل آن را ست کنیم، مثلا به صورت پیش فرض مقدار adminEmail با یک مقداری ست شده است که در واقع همان ایمیل حساب مدیر سایت می باشد، پی یک key و یک value باید برای هر مقدار ست شود مثلا عنصر دوم از آرایه را مشاهده کنید:

return [

                'adminEmail' => 'admin@example.com',

              ‘paramTest’=>’ok!’

];

برای خواندن و برگشتن این مقدار در هر جای پروژه کافی است که این دستور را صدا کنید تا مقدار ok! برای شما برگشت داده شود و چاپ شود:

echo \Yii::$app->params['paramTest']; // print  ok!

OR

echo \Yii::$app->params['adminEmail']; // print admin@example.com

مشاهده می کنیم که با استفاده از دستور \Yii::$app-> می شود به یکسری اجزا دسترسی داشت، در ادامه مشاهده خواهید کرد که تنظیمات مربوط به بانک اطلاعاتی نیز از طریق این کلاس قابل دسترس می باشد.

'id' => 'basic',

در این خط یک مقدار به عنوان نام id پروژه تنظیم شده است شما می توانید آن را تغییر دهید و برای خواند و دسترسی به این مقدار در هرجایی از پروژه از طریق دستور زیر اقدام کنید:

\Yii::$app->id; // print basic

همچنین می توانید یک مقدار را به عنوان نام پروژه ست کنید و صدا بزنید و نتیجه را ببینید:

این خط را به خطوط داخل آرایه در داخل فایل web.php اضافه کنید:

اگر این دستور را هر جایی از پروژه بنویسید می توانید نتیجه را مشاهده کنید:

echo \Yii::$app->name;  // print my first project

مثلا برای نمایش این مقدار در عنوان صفحه نخست پروژه ابتدا از آدرس زیر فایل را باز کنید و این تغییرات را اعمال کنید:

views/site/index.php

خط اول را از این حالت:

اینجا را به این حالت تغییر دهید و صفحه را refresh کنید:

همچنین می توانید به جای name از id نیز استفاده کنید و نتیجه را مشاهده کنید که همان خروجی basic می باشد.

'basePath' => dirname(__DIR__),

این خط از کد هم مسیر اصلی و root پروژه را مشخص می کند، باز هم شما می توانید با استفاده از دستور زیر به مقدار داخل آن دسترسی داشته باشید.

\Yii::$app->basePath; // print C:/wamp:www/basic
 ‘extensions’ => require(__DIR__ . ‘/../vendor/yiisoft/extensions.php’),

این کد برای این صدا می شود که شما بتوانید در پروژه extension های Yii را داشته باشید در مورد این دستور بعدا صحبت خواهیم کرد.

'components' => [
                                'cache' => [
                                                'class' => 'yii\caching\FileCache',
                                ],
                                'user' => [
                                                'identityClass' => 'app\models\User',
                                ],
                                'errorHandler' => [
                                                'errorAction' => 'site/error',
                                ],
                                'mail' => [
                                                'class' => 'yii\swiftmailer\Mailer',
                                ],
                                'log' => [
                                                'traceLevel' => YII_DEBUG ? 3 : 0,
                                                'targets' => [
                                                                [
                                                                                'class' => 'yii\log\FileTarget',
                                                                                'levels' => ['error', 'warning'],
                                                                ],
                                                ],
                                ],
                ],

این شامل تنظیمات مختلفی می باشد و یکی از مهم ترین خطوط این صفحه از می باشد، توجه کید که Yii برپایه Component ساخته شده است اگر شما بخواهید به کلاسی دسترسی داشته باشید یا بخواهید مقداری را به عنوان مقدار پیش فرض از خصوصیات کلاسی ست کنید در این قسمت قابل دسترس است، همانطور که مشاهده می کنید کلاس های خاصی مانند cache یا تعداد لایه های نمایش خطا یا دسترسی کاربران یا ایمیل در این قسمت تنظیم شده است، مثلا مشاهده می کنید که برای خطا ها مشخص شده است تا 3 level را در صورت بروز مشکل نمایش دهد که قابل تنظیم نیز می باشو می تواند ان عدد را بیشتر یا کمتر کنید، یا مشخص شده است در صورت بروز مشکل به کدام صفحه redirect شود. همچنین شما می توانید تنظیمات مربوط به بانک داده ها را به صورت زیر تنظیم کنید تا پروژه شما بتواند با بانک داده ها هم رابطه داشته باشد. فقط کافیست این خطوط را اضافه کنید البته توجه کنید که شما باید این خطوط را به زیر مجموعه components اضافه کنید. و بعد از اضافه کردن username و password را وارد کنید.

کد ها:

      'db' => [

            'class' => 'yii\db\Connection',

            'dsn' => 'mysql:host=localhost;dbname=mydatabase', // MySQL, MariaDB

            //'dsn' => 'sqlite:/path/to/database/file', // SQLite

            //'dsn' => 'pgsql:host=localhost;port=5432;dbname=mydatabase', // PostgreSQL

            //'dsn' => 'cubrid:dbname=demodb;host=localhost;port=33000', // CUBRID

            //'dsn' => 'sqlsrv:Server=localhost;Database=mydatabase', // MS SQL Server, sqlsrv driver

            //'dsn' => 'dblib:host=localhost;dbname=mydatabase', // MS SQL Server, dblib driver

            //'dsn' => 'mssql:host=localhost;dbname=mydatabase', // MS SQL Server, mssql driver

            //'dsn' => 'oci:dbname=//localhost:1521/mydatabase', // Oracle

            'username' => 'root',

            'password' => '',

            'charset' => 'utf8',

        ],

                'params' => $params,

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

\Yii::$app->params[‘*’];

دوستان اگر این خط را کامنت کنید و بخواهید مقداری را در هر جایی از پروژه از پارام بخوانید با خطا مواجه خواهید شد.

if (YII_ENV_DEV) {

                $config['preload'][] = 'debug';

                $config['modules']['debug'] = 'yii\debug\Module';

                $config['modules']['gii'] = 'yii\gii\Module';

}

در این خطوط بررسی می گردد اگر پروژه در حالت Develop باشد همان نوار status که قبلا توضیح داده شد برای شما قابل نمایش باشد در خیر این صورت اگر شما در حالت product باشید دیگر خطوط داخل این شرط اجرا نمی شود و نهایتا هم شما قادر نخواهید بود نوار را مشاهده کنید.

نهایتا توسط دستور زیر  این آرایه return می شود

return $config;

بسیار خوب، مشاهده کردیم که این تنظیمات در یک فایل انجام شد تا برای اعمال به پروژه پاس داده شود، اگر توجه کنید می بینید که Yii از طریق قطعه قطعه کردن و کوچک کردن هر بخش عمل توسعه یک پروژه را ساده کرده است، اکنون شما فهمیدید که اگر بخواهید تنظیمات مربوط به پروژه را انجام دهید باید داخل این فایل تنظیمات را اعمال کنید تا روی کل پروژه تاثیر بگذارد، در گام بعدی آموزش باید به ساختار و نحوه عملکرد controller ها و view ها بپردازیم و همچنین ببینیم که چطور پروژه می تواند با بانک اطلاعاتی ارتباط برقرار کند همه همان مفهوم model هم نیز می باشد.

اگر به یاد داشته باشید ما قبلا گفتیم که controller ها کلاس هایی هستند که در داخل آن متدهایی وجود دارد که می توانیم عمل کنش یا همان action هر درخواست را تنظیم کنیم، در واقع با صدور هر فرمان در browser هر کدام از actions های مربوط به هر controller اجرا و خروجی را نمایش می دهد، اما ببینیم به چه صورتی این صحیت ها عمل می کند، به تصویر توجه کنید و کلاس مورد نظر را باز کنید تا شروع به توضیح کد ها کنیم:

خطوط اول این فایل مربوط به مباحث namespace می باشد که فکر می کنم نیازی به توضیح نداشته باشید، همانطور که مشاهده می شود نام namespace برای این فایل controllers می باشد  همچنین namespace هایی که مربوط به کلاس های لایه model می باشد نیز نوشته شده اند تا بتوانید از کلاس های داخل آن ها استفاده کنیم، اگر توجه کنید یکسری از namespace ها از داخل مسیر yii انجام شده اند و یکسری از طریق مسیر app.

namespace هایی که از مسیر yii انجام شده اند به این معنی می باشد که کلاس ها در مسیر اصلی YiiFramework می باشند و از آنجا صدا زده می شوند و namespace هایی که از مسیر app انجام شده اند به پروژه جاری یعنی basic اشاره می کند، برای نمونه این خط این معنی دارد که این فایل از مسیر اصلی پروژه صدا زده شود.

app\models\LoginForm;

دقت کنید خطوط اول این فایل مربوط به مباحث namespace می باشد که فکر می کنم نیازی به توضیح نداشته باشید، همانطور که مشاهده می شود نام namespace برای این فایل controllers می باشد  همچنین namespace هایی که مربوط به کلاس های لایه model می باشد نیز نوشته شده اند تا بتوانید از کلاس های داخل آن ها استفاده کنیم، اگر توجه کنید یکسری از namespace ها از داخل مسیر yii انجام شده اند و یکسری از طریق مسیر app.

namespace هایی که از مسیر yii انجام شده اند به این معنی می باشد که کلاس ها در مسیر اصلی YiiFramework می باشند و از آنجا صدا زده می شوند و namespace هایی که از مسیر app انجام شده اند به پروژه جاری یعنی basic اشاره می کند، برای نمونه این خط این معنی دارد که این فایل از مسیر اصلی پروژه صدا زده شود.

به ازای هر درخواستی که کاربر در مروگر خود وارد می کند یکی از این action ها یا همان کنش ها اجرا می گردد اگر توجه کنید به ازای هر کدام از action ما در لایه view یک فایل php داریم و در متد action نیز اسم فایلی که قرار است در پوشه view صدا شود را بنویسیم:

                return $this->render('index');

همچنین توجه کنید که اسم متد ها به این نحو می باشد.

function actionAny(){

}

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

قانون نوشتن کلاس Controller به این صورت می باشد که اول یک نام برای کنترلر مشخص کنیم و بعد از آن نیز بلافاصله باید کلمه Controller  برای نام آن اضافه گردد مثلا اسم کنترلر را اگر home در نظر بگیریم  باید فایل php ای در زیر پوشه contollers بسازیم و نام آن را به این صورت تنظیم کنیم، capitalize بودن حروف نیز مهم می باشد.

همچنین باید در پوشه views پوشه ای به نام home با حروف کوچک ساخته شود و به ازای هر action در کلاس home  نیز فایل php هم نام آن را بسازیم، به تصویر توجه کنید:

حتما به نحوه نام گذاری حتما توجه کنید.

این یک مثال ساده از نحوه ی ایجاد یک کلاس controller و نحوه ایجاد ارتباط بین لایه های می باشد، اکنون شما یاد گرفتید چطور یک کلاس controller  ساخته و نام گذاری می شود یاد گرفتید که action ها چطور به view هم رابطه دارند اما بعدها یاد میگیریم که تمام این مراحل را می شود با یک wizard قوی به نام  Gii ساخت و نیاز به نوشتن حتی یک خط کد هم نیست اما فعلا باید چارچوب ها را یاد بگیریم. کلاس SiteController نیز به همین صورت است در آن action هایی نوشته شده است که مربوط به login یا about یا … می باشد.

توضیح خطوط داخل متد های هر کنش در بخش بعدی آموزش.

خوب به امید خدا این جلسه هم به خوبی تموم شد

نمونه ای از آخرین کارهای ما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اگر ربات نیستی جواب بده *

پشتیبانی سایت سئو سایت

خدمات سایت

سئو

خدمات سایت

پشتیبانی سایت سئو سایت خدمات سایت