Yii1กับ Trick ต่างๆ ที่คุณอาจจะยังไม่เคยรู้

Sharing is caring!

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