Phalcon Misc Tips

1. Phalcon Developer Tools

ตัวช่วย สำหรับคนขี้เกียจ ไม่ต้องมานั่งสร้าง Controller/Model/View ให้เมื่อยตุ้ม รันผ่าน command-line (Phalcon Developer Tools) ได้เลย (เหมือน framework ตัวอื่นๆ) ไปหาวิธีติดตั้งได้จาก http://docs.phalconphp.com/en/latest/reference/tools.html

เริ่มใช้ Phalcon Developer Tools

ถ้าเราไม่ได้สร้าง Project ผ่าน command-line หรือเราไป clone git มา บางทีจะพบว่า เฮ้ย! ใช้ Phalcon Developer Tools ไม่ได้ ท้ั้งๆ ที่ติดตั้งเรียบร้อยดีแล้ว แถมยังรัน command-line ที่ path ของ phalcon project แล้ว ก็ยังไม่วาย โดนด่าว่า ใช้งานผิดที่ แบบนี้

Error: This command should be invoked inside a Phalcon project directory  

นั่นเป็นเพราะ Phalcon Developer Tools ไม่รู้ว่า path ที่เราเรียกใช้ command-line มันใช่ Phalcon Project หรือเปล่า

แล้วทำยังไง เจ้า Phalcon Developer Tools ถึงจะมองออกว่า path ที่เราอยู่ คือ Phalcon Project จริงๆ

ไม่ยาก แค่สร้างไฟล์ .phalcon ที่ / ของ Phalcon Project เป็นอันจบ

เพียงเท่านี้ Phalcon Developer Tools ก็จะรู้ตัวว่า เฮ้ย! นี่ไง Phalcon Project ในบัดดล

touch .phalcon  

2. ACL

เวลาทำงานกับ ACL ก็มีเรื่องให้ชวนปวดหัวคือ เปลี่ยน code ACL resource แล้ว แต่ permission ไม่เปลี่ยนตาม เช่น เพิ่ม products เข้าไปใน private resource

<?php  
$acl = new \Phalcon\Acl\Adapter\Memory();

$privateResources = array(
    'settings' => array('index', 'search', 'new', 'edit', 'save', 'create', 'delete'),
    'products' => array('index', 'search', 'new', 'edit', 'save', 'create', 'delete'),
);

แต่พอ var_dump($acl); กลับไม่พบ products ใน ACL List เช่น

protected '_accessList' =>  
    array (size=40)
      '*!*' => boolean true
      'settings!index' => boolean true
      'settings!search' => boolean true
      'settings!new' => boolean true
      'settings!edit' => boolean true
      'settings!save' => boolean true
      'settings!create' => boolean true
      'settings!delete' => boolean true

จริงๆ แล้ว มันเปลี่ยนตามแล้วครับ แต่ปัญหามันอยู่ที่ session เค้าไม่ยอมเปลี่ยนตาม ACL ที่เราเปลี่ยน วิธีแก้คือ ลบ session cookie ซะ ใครที่ใช้ Chrome ก็ใช้ Extension ชื่อ Web Developer จัดการลบ session cookie ซะ แล้วลองเช็ค ACL ใหม่

protected '_accessList' =>  
    array (size=40)
      '*!*' => boolean true
      'settings!index' => boolean true
      'settings!search' => boolean true
      'settings!new' => boolean true
      'settings!edit' => boolean true
      'settings!save' => boolean true
      'settings!create' => boolean true
      'settings!delete' => boolean true
      'products!index' => boolean true
      'products!search' => boolean true
      'products!new' => boolean true
      'products!edit' => boolean true
      'products!save' => boolean true
      'products!create' => boolean true
      'products!delete' => boolean true

นี่ไง products มาแล้ว ง่ายๆ แค่ลบ cookie