آموزش Yii ساختار پوشه ها و فایل ها قسمت چهارم

ساختار پوشه ها و فایل های YiiFramework

ما در هر نوع پروژه ای از YiiFramework ساختار و چیدمان خاص آن را داریم، مثلا در نوع پروژه ای basic ساختار پوشه ها به یک طریق و در نوع پروژ ه ای advanced نیز به نحوی دیگر چیدمان را داریم اما در کل اسم پوشه ها نمایانگر وظیفه ی کاری خود می باشد.

در نوع پروژه ای basic این چیدمان وجود دارد:

تشریح و توضیح کامل فایل های yii

توضیحات

 

نام پوشه

اگر پروژه را با PhpStorm باز یا کانفیگ کردید این پوشه ساخته می شود، و نیازی به Upload روی سرور نیست

.idea

این پوشه شامل یک فایل PHP است که در آن تنظیمات مربوط به Css ها و JS انجام می گیرد

 

assets

در این فایل می توان تنظیماتی مبنی بر فایل های  Css , js ای که قرار است در صفحات اضافه شود یا مسیر اصلی و پوشه های پروژه را تنظیم کرد

AppAsset.php

 

تنظیمات مربوط به کنترلر کنسول پروژه در این پوشه وجود دارد

Commands

تنظیماتی مربوط به ارتباط پروژه با بانک داده یا مقادیری که قرار است بین صفحات به یکدیگر پاس داده شوند و غیره در داخل فایل های این پوشه می باشد.

 

config

تنظیمات مربوط به نوع پروژه کنسول در قالب یک آرایه بر می گرداند.

console.php

 

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

params.php

 

این فایل آرایه ای را برمی گرداند که در آن تنظیمات مهمی همچون نحوه ی ارتباط با بانک داده و تنظیمات مربوط به ایمیل و غیره در آن وجود دارد

web.php

 

همان لایه controller در مدل MVC می باشد و شامل تمام فایل های کنترلر پروژه می باشد یادتان باشد که actions ها توابعی از کلاس های داخل فایل های کنترلر هستند

controllers

همان لایه Model در مدل MVC می باشد و شامل تمام فایل های مدل پروژه می باشد یادتان باشد که validate ها یکی از توابع این نوع کلاس ها در این فایل ها می باشد

models

در لحظه ی اجرا پروژه اگر چیزی را cache کنید یا خطایی صادرگردد در قالب فایل هایی در این پوشه ذخیره می گردد

runtime

همان لایه view در مدل MVC می باشد و وظیفه آن نگه داری فای های لایه نمایش است

 

views

این فایل شامل کدهای HTML و نحوه لایه گذاری صفحات مانند هدر یا فوتر می باشد

layouts/main.php

 

اسم خود پوشه مربوط به فایل کنترلر خاص آن می باشد و به ازای هر فایل داخل پوشه site در کلاس کنترلر مربوطه action ای نوشته شده است  پس اگر روزی فایل کنترلری به نام BookController.php ساخته شود در داخل پوشه ی views پوشه ای ساخته می شود به نام book و در داخل آن پوشه فایل های مربوط به actions های فایل کنترلر قرار می گیرد

site/*

 

این پوشه شامل خود فایل های cssو js می باشد همچنین شما باید آدرس این پوشه را در مرورگر خود صدا کنید تا پروژه اجرا شود، این پوشه شامل یک فایل index.php می باشد که bootstrap پروژه می باشد

 

web

در این پوشه فایل های انتشار یافته روی وب قرار می گیرد همچنین فایل های Jquery در لحظه اجرا پروژه در این پوشه ساخته و استفاده می گردد

assets/*

 

فایل های Css در این پوشه قرار می گیرید

css/*

 

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

index.php

 

این فایل نیز آغازگر پروژه برای حالت test می باشد

index-test.php

 

این فایل شامل تنظیماتی برای کنترل ورژن یا دسترسی به پوشه ای پروژه می باشد.

.gitignore

تنظیمات مربوط به Codeception  در این فایل قرار می گیرد

codeception.yml

تنظیمات مربوط به composer  که در بخش اول آموزش در مورد آن بحث کردیم در این فایل قرار می گیرد،

composer.json

اگر این فایل را از طرق مرورگر خود اجرا کنید لیستی از نیازمندی های Yii برای شما نمایش داده می شود، آنهایی که به رنگ سبز می باشند یعنی نیازمندیYii فعال است اما آنهایی که به رنگ قرمز است یعنی باید روی سرور فعال گردد، extention مربط به mysql و PDOباید حتما فعال باشد به عکس ضمیمه نیز توجه کنید

requirements.php

این فایل bootstrap مربوط به کنسول می باشد

yii

این فایل مریوط به تنظیماتی همچون جابجایی دیتابیس و غیره در محیط سیستم عامل ویندوز می باشد، به تصویر توجه کنید

Yii.bat

بسیار خوب، بهترین را برای درک بهتر نحوه ی کار پروژه برررسی یک سناریو ساده می باشد، من یه مثال میزنم و سپس در هر گام بیان می کنم الان در کدام پوشه هستیم و چه فایلی اجرا می شود:

در گام اول کاربر در مرورگر خود اسم سایت شما را وارد می کند، شما باید آدرس سایت خود را به پوشه localhost/basic/web/ تنظیم کنید تا سایت شما اجرا گردد؛ در تصویر توجه کنید چه آدرسی وارد شده است. شما باید تصویری مانند تصویر زیر مشاهده کنید.

این آدرس هیچ فرقی با این دو دستور ندارد:

Localhost/basic/index.php

یا

localhost/basic/web/index.php?r=site/index

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

بسیار خوب، ببینیم چه اتفاقی می افتد، وقتی شما localhost/basic/web/ را وارد کنید و تنظیمات مربوط به rewrite در سرور فعال باشد فایل Index.php به صورت پیش فرض اجرا می شود پس هیچ فرقی ندارد شما آدرس را بودن قید نام index.php صدا کنید یا با قید نام فایل، اما در روشی که شما آدرس را به صورت localhost/basic/web/index.php?r=site/index

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

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

I   ابتدا کاربر یک درخواست مثل این را صادر می کند(لازم به ذکر هست که در مورد این ساختار صحبت خواهیم کرد)http://localhost/first/index.php?r=site/contact

I   وب سرور درخواست را به هندل پروژه داده و درخواست توسط فایل  index دریافت میشود که به این فایل bootstrapگفته می شود.

I   Bootstrap  یک نمونه از application را ساخته و run می کند.

Application با استفاده از urlManager و request شروع به پردازش آدرس وارد شده می کند.

I   بسته به درخواست کنترلر مورد نظر صدا زده شده و کنش مورد نظر برای اجرا فایل view صدا زده می شود، حال اگر در این بین نیاز به اتصال به بانک اطلاعاتی باشد این کار انجام میگیرد و در نهایت خروجی به لایه های می چسپد و کنار widgetیک کد html تشکیل داده و برای خروجی آماده می شود

I   نهایتا آن فایل html نمایش داده می شود.

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

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

در کل یک درخواست این ساختار(format) را دارا می باشد:

index.php?r=site/contact

کاراکتر r نمایش دهنده Route می باشد و به Route می گوید که کدام کنترلر و کدام کنش را باید اجرا کند، حالا ساختار آن چطور است؟ site/contact

site/contact به این ساختار ساده نیست، در اصل این دستور به این شکل می باشد:

ControllerSite/actionContact

که برای امنیت بیشتر و اینکه کسی از ساختار دستورات چیزی متوجه نشود Route آن را پردازش کرده و درخواست کاربر به این شکل تبدیل و کنترلر مورد نظر و کنش مورد نظر صدا می شود.

پس فرمت کلی به این شکل می باشد:

index.php?r=نام کنترلر/نام کنش

index.php?r=ControllerID/actionID

البته این ساختار می تواند به شکل های مختلف دیگری هم باشد که بعدها در مورد آن صحبت خواهیم کرد:

index.php?r=site/show&id=1

index.php?r=forum/site/create

دقت کنید دوستان، وقتی یک کاربر درخواستی را صادر می کند دقیقا به همین نام در مسیر روبرو فایل کنترلری وجود دارد که کنش مورد نظر در آن وجود دارد و برای لایه نمایش هم نیز پوشه ای به همین نام وجود دارد به مسیر پوشه ها و فایل ها توجه کنید:

 \first\protected\controllers\SiteController.php

\first\protected\views\site\

پس فهمیدیم که Route بعد از پردازش درخواست ما توسط کلاسی به نام urlManager یک کلمه Controllerبه اول نام کنترلر ما و یک کلمه action هم به اول نام کنش ما اضافه می کند و فایل را از مسیر واقعی که در بالا نشان داده شد صدا می کند.

پس فهمیدیم که هر درخواستی در Yii به این روش پردازش و اجرا می شود، اگر به داخل فایل index.php برویم و بخواهیم محتوایات داخل آن را تحلیل کنیم می بینیم این خط کدها نوشته شده اند:

Localhost/basic/web/index.php

// comment out the following two lines when deployed to production

defined('YII_DEBUG') or define('YII_DEBUG', true);

در این خط برای پروژه مشخص می شود که حالت debug باید فعال باشد و هر خطایی اگر صادر گردد را مشاهده می کنیم و محتوایات stack را در هر مرحله  نیز مشاهده خواهیم کرد، توجه کنید اگر پروژه هنوز در حالت develop یا deployed و برنامه نویسی می باشد باید این حالت را فعال کنید در غیر اینصورت اگر پروژه روی سرور ایت و کاربران آن را مشاهده می کنند باید این خط را comment کنید تا اگر خطایی رخ داد متن خطار را نمایش ندهد.

defined('YII_ENV') or define('YII_ENV', 'dev');

با comment کردن این خط سایت شما به شکل زیر تغییر می کند

قبل از غیر فعال کردن کد:

بعد از غیر فعال کردن کد:

 در yii 2  این قابلیت برای شما وجود دارد که در هر مرحله از اجرای صفحات و دستورات میزان حافظه مصرف شده یا log ها یا تنظیمات مربوط به بانک داده ها را در قالب بخشی مدیریتی در لحظه ی اجرا را مشاهده کنید، در کل می توان گفت که شما با استفاده از این قابلیت می تواند تمام اتفاقاتی که رخ میدهد را مدیریت کنید و خطاهای احتمالی را تشخیص دهید. باز هم تاکید می شود که این حالت در مواقعی است که شما هنوز سایت خود را روی سرور واقعی قرار نداده اید و درحال برنامه نویسی هستید، به همین دلیل است که در خود comment نیز قید شده است اگر در حالت production هستید دو خط اول را غیرفعال کنید.

require(__DIR__ . '/../vendor/autoload.php');

فایل autoload.php که مربوط به خود framework است در این خط به پروژه اضافه می گردد تا بتوانید بحث های Namespace را هندل کنید.

require(__DIR__ . '/../vendor/yiisoft/yii2/yii/Yii.php');

فایل اصلی framework در این خط به پروژه اضافه می گردد.

$config = require(__DIR__ . '/../config/web.php');

در این خط نیز فایل config.php که قبلا توضیح داده شد صدا می شود تا تنظیمات مربوط به بانک اطلاعاتی یا … که در قالب یک آرایه می باشد به متغییر $config پاس داده شود تا در خط بعد برای اجرا داده شود.

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

همانطور که مشاهده می کنید در این خط متغییر$config که محتوای یک آرایه است برای شروع کار Framework به پروژه assign می شود. و در خط بعد متد run از کلاس application اجرا می شود تا پروژه شروع به کار کند.

$application->run();

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

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

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

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

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

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

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

خدمات سایت

سئو

خدمات سایت

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