Yii1กับ Trick ต่างๆ ที่คุณอาจจะยังไม่เคยรู้ (จากประสบการณ์ใช้งานจริง)
ถึงแม้ว่า PHP Framework ที่ชื่อว่า Yii นี้ปัจจุบันจะพัฒนาไปถึง version 2 เป็นที่เรียบร้อยแล้ว แล้วจะเปลี่ยนไปใช้ version ใหม่ไปทำไมก็ในเมื่อ v.1.x ยังใช้งานไม่เต็มประสิทธิภาพเลย (ถึงแม้ใครจะบอกว่า version ใหม่ย่อมดีกว่าของเก่าเสมอ) ใช่สิก็ Content ของวันนี้เป็นเรื่อง Trick ของ Yii1 สิครับ ก็ต้องอวย v.1.x สิไม่แปลก
เริ่มตั้งแต่การ Setup Yii1 กัน
- ก่อนอื่นก็ต้องไป Download Yii1 ที่ Yii1 Link Download
- Unzip File yii-1.1.17.467ff50.zip และให้ Copy หรือ Rename Folder ให้เป็นชื่อ application ของเราเอง ภายในให้เหลือแต่ folder ชื่อ framework, requirements
- Run Command
cd demo php framework/yiic wepapp app
Trick
1.ไม่อยากให้ URL มีคำว่า r=index.php
1. เปิด Url re-writing on Apache 2. สร้างไฟล์ .htaccess วางใน root path app ของเรา ภายในไฟล์ใส่คำสั่งดังต่อไปนี้ RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php 3. เปิดการใช้งาน urlManager ใน Configuration ที่ไฟล์ protected/config/main.php (ถ้า comment อยู่ในเอา comment ออก) 'urlManager'=>array( 'urlFormat'=>'path', 'rules'=>array( '<controller:\w+>/<id:\d+>'=>'<controller>/view', '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', '<controller:\w+>/<action:\w+>'=>'<controller>/<action>', ), 'showScriptName'=>false, )
2.include internal javascript file end of body tag </body>
โดยปกติการ include file javascirpt เข้าไปใช้ใน project ของเรา <script type="text/javascript" src="http://poolsawat.com/js/jquery.min.2.2.4.js"></script> ในส่วนของ tag <head></head> แล้วถ้า dependencies ของในส่วนที่เราเรียกใช้มันเยอะมากละ มีผลต่อ performance แน่ ๆ ดังนั้นการที่เราใส่ js ไฟล์ที่ tag body ก่อน </body> จะช่วยแก้ปัญหาเรื่องนี้ได้มาก สำหรับ Yii1 หากต้องการทำแบบนี้ให้ใช้คำสั่ง $cs = Yii::app()->clientScript; $cs->registerScriptFile($Yii::app()->baseUrl. '/js/jquery.min.2.2.4.js', CClientScript::POS_END); เท่านี้ก็จะทำให้ไฟล์ js ของเราถูกโหลดหลัง html page แล้วครับ
3.echo data in JSON format ด้วย CJSON
$data = array('status' => true, 'message' => 'ok'); echo CJSON::encode($data);
4.Get form enctype=”multipart/form-data” ด้วย CUploadedFile::getInstanceByName(‘picture’)
<!-- form.php --> <form class="ui form" method="post" action="upload.php" enctype="multipart/form-data"> <input type="file" name="picture" id="idInputPicture" /> </form> <!-- upload.php--> $file = CUploadedFile::getInstanceByName('picture'); $file->getError(); $file->getExtensionName(); $file->getName(); $file->getSize(); $file->getTempName(); $file->getType(); $file->saveAs(Yii::getPathOfAlias('webroot') . '/uploads/' . $file->getName());
5. use NOW() ด้วย CDbExpression Class
$model->field_date = new CDbExpression('NOW()'); $model->save(); * ใช้สำหรับการ save ผ่าน model