Sudah bisa sih gan, tapi adamasalah satu lagi wkkwkwwkwk.
Saya share dulu dah sampai mana keberhasilan saya. Tapi ini masih ada bugs juga kalau pakai CGridView dengan primaryKey adalah varChar
Jadi yang harus kita rubah sebagai berikut jika kondisi mvc untuk tabel item
main/config.php
'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>',
'item/update/<id:\w+>'=>'item/update', // ini untuk menjalankan update
'item/view/<id:\w+>'=>'item/view', // ini untuk menjalankan view
),
),
controller/ItemController.php
public function loadModel($id)
{
$model=Item::model()->findByPk((int)$id); // pengecekan pertama (id int)
if($model===null) {
$model=Item::model()->findByPk($id); // pengecekan kedua (id semua tipe)
if($model===null)
throw new CHttpException(404,'The requested page does not exist.');
}
return $model;
}
sejauh ini sudah berhasil gan, namun yang bermasalah adalah CGridView
untuk menu view url langsung diarahkan ke url/site/item/[id], tidak ada path actionnya (cth url/site/item/view/id)
jika kita rubah di urlManagernya ‘<controller:\w+>/<id:\w+>’=>’<controller>/view’, malah jadinya ngaco semua.
kwkwkwkw. gimana neh, ada ide gak untuk viewnya. atau kita kasih tau qiang saja kalau CGridView untuk path menu viewnya mohon dirubah jadi url/site/view/[id]
ane juga dulu nemu permasalahan kya gini, pk nya varchar kayak contonya nomor surat,
paduan huruf dan angka, alhasil tidak bisa lulus preg_match.
padahal klo di dokumentasi typenya string. harusnya bisa.
ane bongkar2x di class conrtoller-nya klo ga salah…
coba langsng hardcode id nya?
public function loadModel()
{
$_GET['id'] = 'r123'; //coba test hardcode idnya disini, kyanya bisa deh,
//menurut ane sebelum masuk ke loadModel(), param sdh di-sterilkan
//sama class controller, disitulah tidak lulus preg_match
if($this->_model===null)
{
if(isset($_GET['id'])){
$this->_model=t_surat::model()->findbyPk($_GET['id']);
--
--
btw, ane cm share pengalaman, mungkin ada solusi yg lebih baik dari yg lain.
wuih akhirnya beres juga. saya rubah di urlManagernya
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
'<controller:\w+>/<action:(create|view|update|delete|admin|index)>'=>'<controller>/<action>', //dilimit hanya untuk action(create|view|update|delete|admin|index)
'<controller:(item)>/<action:\w+>/<id:\w+>'=>'item/<action>',
'<controller:(item)>/<id:\w+>'=>'item/view', //rules: tidak boleh input primary key (create|view|update|delete|admin|index)
),
),
tapi cara ini keliatannya kurang efektif neh… lebih bagus lagi jika dari crgidviewnya diseragamkan jadi link view itu pakai action view juga. jadi gak perlu pakai ini itu. (ini berlaku jika model yg kita gunakan menggunakan primary key (varchar) bukan integer.
Coba aku jelasin dah kenapa bermasalah jika pk kita adalah variable varchar bukan integer / numeric.
Pertama jika kita menggunakan urlManager default dari Yii secara otomatis akan dibaca sebagai berikut
'urlManager'=>array(
'urlFormat'=>'path',
'rules'=>array(
'<controller:\w+>/<id:\d+>'=>'<controller>/view', // 1. jika path kita site.com/item/id[varchar] maka tidak akan diproses, namun jika [id(int)] akan diproses bedanya ada di \w dan \d.
\\ \d itu numeric
\\ \w itu untuk selain numeric (num + char)
'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>', // 2. tidak akan dibaca juga, karena path urlnya dibelakangnya varchar, sedangkan yg di rules ini harus numeric dibelakangnya
'<controller:\w+>/<action:\w>'=>'<controller>/<action>', // 3. ini dijalankan. kemudian masuklah ke action controllernya. namun ActionAbc tidak ada di ItemController.php
),
),
jadi urlManager untuk langkah 1. 2. dan 3. yg dijalankan adalah yg nomor 3.
namun tidak ada action yg sesuai.
sedangkan jika tidak ada action yg sesuai maka tidak ada yg bisa di proses
jelas gak ya … sori kalo salah neh jelasinnya, tapi kira2 begini gan.