milanFan
سه شنبه 29 فروردین 1391, 23:47 عصر
مقدمه
در قسمت اول (http://www.hamcodi.ir/article/29) از سری آموزشی Yii به بیان چگونگی نصب و پیکربندی این چهارچوب کاری قوی و نیز توصیف الگوی استفاده شده در آن(MVC) پرداختیم.در این مقاله سعی می شود اصول زیربنایی برنامه هایی که با این چهارچوب کاری ساخته می شوند بیان شود.
اسکریپت آغازین (Entry Script)
هنگامی که کاربر وب سایتی را که با Yii نوشته شده است باز می کند، در واقع اسکریپتی را که در فایل اندیس سایت(index.php) نوشته شده است اجرا می کند.این اسکریپت تنها کد PHP ای است که بطور مستقیم توسط کاربر نهایی(end-user) اجرا می گردد و وظیفه مدیریت تقاضاهای کاربر را برعهده دارد.
معمولا اسکریپت آغازین برنامه های نوشته شده با Yii مشابه کد زیر هستند:
// remove the following line when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// include Yii bootstrap file
require_once('path/to/yii/framework/yii.php');
// create application instance and run
$configFile='path/to/config/file.php';
Yii::createWebApplication($configFile)->run();
از مواردی که در این اسکریپت مشخص می شود مسیر فایل yii.php است که در پوشه framework قرار دارد.همانطور که در کد بالا مشاهده می شود متغیری بنام $configFile تعریف شده است.در این متغیر مسیر فایل پیکربندی برنامه که معمولا در آدرس /protected/config/main.php وجود دارد، تعیین می شود.این فایل شامل پارامتر های اجرای برنامه شما از قبیل نام برنامه، مسیر اصلی برنامه و همچنین اطلاعات ارتباطی با پایگاه داده می باشد.
حالت های اجرا در Yii:
یکی از قابلیت هایی که Yii برای توسعه به برنامه نویسان می دهد امکان اجرای برنامه در دو حالت Debug و Production است.در حالت دیباگ که مخصوص زمان پیاده سازی و توسعه برنامه است باعث ایجاد log file های متعددی می گردد که به کاربر جهت تسهیل فرآیند خطا یابی کمک می کند.طبیعی است که اجرای برنامه در این حالت باعث افت کارایی آن می شود.برای فعال کردن حالت دیباگ کافی است مشابه کد زیر مقدار ثابت YII_DEBUG را برابر true قرار دهیم.
defined('YII_DEBUG') or define('YII_DEBUG',true);
برای خارج شدن از حالت دیباگ می توان مقدار YII_DEBUG را برابر با false قرار داد.لاذم به ذکر است که حالت پیش فرض در Yii حالت production است.
برای آغاز اجرای برنامه در محیط yii باید از دستور :
Yii::createWebApplication($configFile)->run();
استفاده کرد.
شی application
این شی اولین کنترولر برنامه است که بصورت خودکار در هنگام اجرای برنامه ایجاد شده و بر اساس درخواست کاربر جریان اجرا را به کنترل کننده ای مناسب اختصاص می دهد.درواقع می توان گفت این شیء پس از دریافت تقاضای کاربر،اطلاعاتی اولیه را در مورد آن جمع آوری کرده و سپس بر اساس این اطلاعات تقاضا را بمنظور ادامه روند پردازش به کنترول کننده مربوطه تحویل می دهد.از همین رو این شی را با نام کنترول کننده پیشتاز نیز می شناسند.
با اجرای اسکریپت آغازین در حقیقت نمونه ای از این شیء ایجاد می گردد که در هرکجای برنامه می توانید از طریق اسکریپت ()Yii::app به آن دسترسی داشته باشید.
پیکربندی شیء application
بطور پیش فرض شی ء application نمونه ای از کلاس CWebApplication می باشد.معمولا برای شخصی سازی آن پارامتر های برنامه را که در فایل پیکربندی برنامه قرار دارد تغییر می دهیم. همانطور که در بالا گفته شد این فایل در پوشه ای با آدرس /protected/config/main.php ذخیره می شود که حاوی آرایه ای از زوج های (مقدار <= نام) می باشد. برای مثال محتوای فایل پیکربندی می تواند مانند مثال زیر باشد :
Return array(
'name'=>'Yii Framework',
'defaultController'=>'site',
);
در این مثال نام برنامه با مقدار Yii FrameWork و کنترول کننده پیش فرض آن site تعیین شده است.کنترول کننده پیش فرض کنترول کننده است که درخواست های کاربر بطور پیش فرض به آن ارسال می شوند.
در صورت گسترده بودن برنامه می توان فایل پیکربندی را در چندین فایل تقسیم کرده و آنها را در فایل main اینکلود نماییم.
برای بکارگیری پارامتر های تعیین شده در فایل پیکربندی،درهنگام ایجاد نمونه ای از شیء Application، این فایل را بعنوان پارامتر به آن ارسال می کنیم.
deny from all
این مسیر را می توان از طریق پارامتر BasePath در فایل پیکربندی برنامه تغییر داد.
کامپوننت های برنامه:
از ویژگی های چهارچوب کاری Yii پیریزی آن بر پایه کامپوننت هاست.کامپوننت ها در Yii نقشی بسیار مهم را ایفا می کنند که تاثیر بسیاری در کارایی برنامه و تسهیل در امر اجرای آن می گذارند.بوسیله آنها می توان برنامه را به بخش هایی مجزا تقسیم کرد که هر بخش وظیفه و کارایی خاص خود را خواهند داشت.آنها در واقع اشیائی از کلاس Ccomponent در Yii هستند که خصوصیات،رویداد ها و رفتار های مربوط به خود را دارند.
در Yii دونوع کامپوننت جهت استفاده وجود دارد.نوع اول کامپوننت هایی هستند که توسط خود برنامه نویس تعریف می شوند.دسته دوم کامپوننت های هسته Yii هستند. بعنوان مثال کامپوننت CHttpRequest و یا CUrlManager که در اجرای تقاضا های کاربران تاثیر گذارند.این کامپوننت ها را می توان از طریق فایل پیکربندی برنامه شخصی سازی نمود. بعنوان مثال :
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
);
در کد بالا از طریق فایل پیکربندی کامپوننت CMemCache را شخصی سازی می نماییم.
استفاده از کامپوننت یعنی دسترسی با خصوصیات آن و یا استفاده از رویداد هایش می باشد.برای دستیابی به کامپوننت ها از کد زیر استفاده می شود که در آن ComponentID نام کاپوننتی است که قصد داریم از آن استفاده کنیم.
Yii::app()->ComponentID;
که بعنوان مثال ComponentID در این مثال همان cache می باشد.
Yii::app()->cache;
برای دسترسی به خصوصیت ها همانند متغیر های public عمل می شود:
$width=$component->textWidth; // get the textWidth property
$component->enableCaching=true; // set the enableCaching property
برای تعریف خصوصیت برای یک کامپوننت می توان از متغیر های public استفاده نمود.
Public $TextWidth;
همچنین می توان از توابع getter() و setter() برای این منظور بهره برد :
public function getTextWidth()
{
return $this->_textWidth;
}
public function setTextWidth($value)
{
$this->_textWidth=$value;
}
در مثال بالا هنگام خواندن متغیر textWidth تابع getTextWidth فراخوانی می گردد و مقدار خصوصیت را باز می گرداند.تابع setTextWidth نیز در هنگام نوشتن فراخوانی می شود.
توجه داشته باشید که اگر از روش دوم جهت تعریف یک خاصیت استفاده نمایید خصوصیات حساس به حروف نمی باشند.
رویداد ها توابعی هستند که در هنگام رخداد عملی خاص فراخوانی می گردند. در تعریف توابع مربوط به رویداد ها از کلمه on قبل از نام رویداد استفاده می شود.
public function onClicked($event)
{
$this->raiseEvent('onClicked', $event);
}
میتوان به یک رویداد، یک تابع را نسبت داد.بعنوان مثال :
$component->onClicked=$callback;
$callback میتواند یک public function و یا یک class method باشد.
در مقاله آموزشی بعد به سراغ اجزاء اصلی مدل MVC یعنی مدل،نما و کنترول کننده خواهیم رفت.
منبع (http://www.hamcodi.ir/article/32)
در قسمت اول (http://www.hamcodi.ir/article/29) از سری آموزشی Yii به بیان چگونگی نصب و پیکربندی این چهارچوب کاری قوی و نیز توصیف الگوی استفاده شده در آن(MVC) پرداختیم.در این مقاله سعی می شود اصول زیربنایی برنامه هایی که با این چهارچوب کاری ساخته می شوند بیان شود.
اسکریپت آغازین (Entry Script)
هنگامی که کاربر وب سایتی را که با Yii نوشته شده است باز می کند، در واقع اسکریپتی را که در فایل اندیس سایت(index.php) نوشته شده است اجرا می کند.این اسکریپت تنها کد PHP ای است که بطور مستقیم توسط کاربر نهایی(end-user) اجرا می گردد و وظیفه مدیریت تقاضاهای کاربر را برعهده دارد.
معمولا اسکریپت آغازین برنامه های نوشته شده با Yii مشابه کد زیر هستند:
// remove the following line when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// include Yii bootstrap file
require_once('path/to/yii/framework/yii.php');
// create application instance and run
$configFile='path/to/config/file.php';
Yii::createWebApplication($configFile)->run();
از مواردی که در این اسکریپت مشخص می شود مسیر فایل yii.php است که در پوشه framework قرار دارد.همانطور که در کد بالا مشاهده می شود متغیری بنام $configFile تعریف شده است.در این متغیر مسیر فایل پیکربندی برنامه که معمولا در آدرس /protected/config/main.php وجود دارد، تعیین می شود.این فایل شامل پارامتر های اجرای برنامه شما از قبیل نام برنامه، مسیر اصلی برنامه و همچنین اطلاعات ارتباطی با پایگاه داده می باشد.
حالت های اجرا در Yii:
یکی از قابلیت هایی که Yii برای توسعه به برنامه نویسان می دهد امکان اجرای برنامه در دو حالت Debug و Production است.در حالت دیباگ که مخصوص زمان پیاده سازی و توسعه برنامه است باعث ایجاد log file های متعددی می گردد که به کاربر جهت تسهیل فرآیند خطا یابی کمک می کند.طبیعی است که اجرای برنامه در این حالت باعث افت کارایی آن می شود.برای فعال کردن حالت دیباگ کافی است مشابه کد زیر مقدار ثابت YII_DEBUG را برابر true قرار دهیم.
defined('YII_DEBUG') or define('YII_DEBUG',true);
برای خارج شدن از حالت دیباگ می توان مقدار YII_DEBUG را برابر با false قرار داد.لاذم به ذکر است که حالت پیش فرض در Yii حالت production است.
برای آغاز اجرای برنامه در محیط yii باید از دستور :
Yii::createWebApplication($configFile)->run();
استفاده کرد.
شی application
این شی اولین کنترولر برنامه است که بصورت خودکار در هنگام اجرای برنامه ایجاد شده و بر اساس درخواست کاربر جریان اجرا را به کنترل کننده ای مناسب اختصاص می دهد.درواقع می توان گفت این شیء پس از دریافت تقاضای کاربر،اطلاعاتی اولیه را در مورد آن جمع آوری کرده و سپس بر اساس این اطلاعات تقاضا را بمنظور ادامه روند پردازش به کنترول کننده مربوطه تحویل می دهد.از همین رو این شی را با نام کنترول کننده پیشتاز نیز می شناسند.
با اجرای اسکریپت آغازین در حقیقت نمونه ای از این شیء ایجاد می گردد که در هرکجای برنامه می توانید از طریق اسکریپت ()Yii::app به آن دسترسی داشته باشید.
پیکربندی شیء application
بطور پیش فرض شی ء application نمونه ای از کلاس CWebApplication می باشد.معمولا برای شخصی سازی آن پارامتر های برنامه را که در فایل پیکربندی برنامه قرار دارد تغییر می دهیم. همانطور که در بالا گفته شد این فایل در پوشه ای با آدرس /protected/config/main.php ذخیره می شود که حاوی آرایه ای از زوج های (مقدار <= نام) می باشد. برای مثال محتوای فایل پیکربندی می تواند مانند مثال زیر باشد :
Return array(
'name'=>'Yii Framework',
'defaultController'=>'site',
);
در این مثال نام برنامه با مقدار Yii FrameWork و کنترول کننده پیش فرض آن site تعیین شده است.کنترول کننده پیش فرض کنترول کننده است که درخواست های کاربر بطور پیش فرض به آن ارسال می شوند.
در صورت گسترده بودن برنامه می توان فایل پیکربندی را در چندین فایل تقسیم کرده و آنها را در فایل main اینکلود نماییم.
برای بکارگیری پارامتر های تعیین شده در فایل پیکربندی،درهنگام ایجاد نمونه ای از شیء Application، این فایل را بعنوان پارامتر به آن ارسال می کنیم.
deny from all
این مسیر را می توان از طریق پارامتر BasePath در فایل پیکربندی برنامه تغییر داد.
کامپوننت های برنامه:
از ویژگی های چهارچوب کاری Yii پیریزی آن بر پایه کامپوننت هاست.کامپوننت ها در Yii نقشی بسیار مهم را ایفا می کنند که تاثیر بسیاری در کارایی برنامه و تسهیل در امر اجرای آن می گذارند.بوسیله آنها می توان برنامه را به بخش هایی مجزا تقسیم کرد که هر بخش وظیفه و کارایی خاص خود را خواهند داشت.آنها در واقع اشیائی از کلاس Ccomponent در Yii هستند که خصوصیات،رویداد ها و رفتار های مربوط به خود را دارند.
در Yii دونوع کامپوننت جهت استفاده وجود دارد.نوع اول کامپوننت هایی هستند که توسط خود برنامه نویس تعریف می شوند.دسته دوم کامپوننت های هسته Yii هستند. بعنوان مثال کامپوننت CHttpRequest و یا CUrlManager که در اجرای تقاضا های کاربران تاثیر گذارند.این کامپوننت ها را می توان از طریق فایل پیکربندی برنامه شخصی سازی نمود. بعنوان مثال :
array(
......
'components'=>array(
......
'cache'=>array(
'class'=>'CMemCache',
'servers'=>array(
array('host'=>'server1', 'port'=>11211, 'weight'=>60),
array('host'=>'server2', 'port'=>11211, 'weight'=>40),
),
),
),
);
در کد بالا از طریق فایل پیکربندی کامپوننت CMemCache را شخصی سازی می نماییم.
استفاده از کامپوننت یعنی دسترسی با خصوصیات آن و یا استفاده از رویداد هایش می باشد.برای دستیابی به کامپوننت ها از کد زیر استفاده می شود که در آن ComponentID نام کاپوننتی است که قصد داریم از آن استفاده کنیم.
Yii::app()->ComponentID;
که بعنوان مثال ComponentID در این مثال همان cache می باشد.
Yii::app()->cache;
برای دسترسی به خصوصیت ها همانند متغیر های public عمل می شود:
$width=$component->textWidth; // get the textWidth property
$component->enableCaching=true; // set the enableCaching property
برای تعریف خصوصیت برای یک کامپوننت می توان از متغیر های public استفاده نمود.
Public $TextWidth;
همچنین می توان از توابع getter() و setter() برای این منظور بهره برد :
public function getTextWidth()
{
return $this->_textWidth;
}
public function setTextWidth($value)
{
$this->_textWidth=$value;
}
در مثال بالا هنگام خواندن متغیر textWidth تابع getTextWidth فراخوانی می گردد و مقدار خصوصیت را باز می گرداند.تابع setTextWidth نیز در هنگام نوشتن فراخوانی می شود.
توجه داشته باشید که اگر از روش دوم جهت تعریف یک خاصیت استفاده نمایید خصوصیات حساس به حروف نمی باشند.
رویداد ها توابعی هستند که در هنگام رخداد عملی خاص فراخوانی می گردند. در تعریف توابع مربوط به رویداد ها از کلمه on قبل از نام رویداد استفاده می شود.
public function onClicked($event)
{
$this->raiseEvent('onClicked', $event);
}
میتوان به یک رویداد، یک تابع را نسبت داد.بعنوان مثال :
$component->onClicked=$callback;
$callback میتواند یک public function و یا یک class method باشد.
در مقاله آموزشی بعد به سراغ اجزاء اصلی مدل MVC یعنی مدل،نما و کنترول کننده خواهیم رفت.
منبع (http://www.hamcodi.ir/article/32)