PDA

View Full Version : آموزش: Yii Framework - قسمت دوم



milanFan
سه شنبه 29 فروردین 1391, 22: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)

mosi2007
چهارشنبه 30 فروردین 1391, 02:39 صبح
بی زحمت ادامه بده منابع اموزشی فارسی زیاد نیست یک pdf هم به زبان فارسی تو نت است که اصلا درست درس نداده
راستی قسمت اولش کجاست
چرا تو یه تاپک همه اموزشها رو نمیزارید

ممنون

milanFan
یک شنبه 21 خرداد 1391, 13:31 عصر
پنهان ساختن فایل index.php در Yii Framework (http://www.hamcodi.ir/article/149)

سلام به همه.... دراين مقاله مختصر مي خواهم به يکي از مسائل ساده اما پر استفاده در طراحي وب سايت بپردازم.يکي از مواردي که بسياري از برنامه نويسان وب بدنبال پيدا کردن راهي براي آن هستند، مخفي کردن فايل انديس سايت ( (index.phpاست.روش هاي مختلفي براي اينکار وجود دارد اما امروز مي خواهم روشي ساده را براي آندسته از عزيزاني که بتازگي به جمع برنامه نويسان Yii Framework پيوسته اند آموزش دهم.

فعال کردن mod_rewrite:

پيش از هر اقدامي ابتدا بايد مطمئن شويم که خاصيت mod_rewrite بر روي سرور ما (Apache) فعال است چراکه براي کاري که ما مي خواهيم انجام دهيم به آن نياز داريم.براي اطمينان از فعال بودن آن کافي است به فايل httpd.conf سري بزنيم و در آن بدنبال خط زير بگرديم:

#LoadModule rewrite_module modules/mod_rewrite.so
همانطور که ميبينيد در مثال بالا اين خط کامنت شده است که بمعني غير فعال بودن mod_rewrite مي باشد.براي آنکه آنرا به حالت فعال تبديل کنيم کافي است اين خط را از حالت کامنت خارج کنيم.مانند کد زير:

LoadModule rewrite_module modules/mod_rewrite.so

البته براي تشخيص فعال بودن اين خاصيت مي توانيد phpinfo.php را نيز بررسي کنيد.

تغيير فايل .htaccess

پس از فعال کردن mod_rewrite نوبت به بکارگيري آن مي رسد.براي اين منظور به فايل .htaccess برنامه برويد و کد هاي زير را در آن وارد نماييد.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]

توجه داشته باشيد که اين تغييرات را در فايل .htaccess واقع در ريشه برنامه اعمال کنيد.يعني همانجايي که فايل index.php شما در ان قرار گرفته است.

www
- protected
- index.php
- .htaccess
تغيير فايل پيکربندي برنامه:

آخرين کاري که بايد انجام شود اعمال تغييراتي در فايل پيکربندي است تا خاصيت mod_rewrite بدرستي عمل نمايد.براي اين منظور به فايل config.php واقع در شاخه /protected/config برويد و کامپوننت زير را به آن اضافه نماييد.

'urlManager'=>array(
'urlFormat'=>'path',
'showScriptName'=>false,
'caseSensitive'=>false,
),
بدين ترتيب کار تمام است و پس از اجرا برنامه ديگر اثري از فايل index.php نبايد ببينيد.البته مي توانيد با استفاده از کامپوننت urlManager تغييراتي را در url نيز ايجاد کنيد که هم آدرس هايي زيباتر داشته باشيد و هم سازگاري بيشتري با موتور هاي جستجو پيدا کند.براي اين منظور مي توانيد از خاصيت rules بهره بريد.بعنوان مثال مي توانيد بصورت زير عمل کنيم.

'urlManager' => array(
'urlFormat' => 'path',
'showScriptName' => false,
'rules' => array(
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),
اميدوارم اين مقاله مختصر اما کاربردي بتواند براي شما عزيزان مفيد واقع شود.

منبع : همکدی (http://www.hamcodi.ir)