Yii Framework Forum: Help: UrlManager Problem jika Primary Key (VarChar) - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Help: UrlManager Problem jika Primary Key (VarChar) Rate Topic: -----

#1 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 04 January 2011 - 11:57 PM

Ada masalah nih teman-teman pada saat menggunakan primaryKey (Varchar)
bukan integer (numeric).
pada saat view or update path urlnya dianggap salah

berikut urlManagernya

'<controller:\w+>/<id:\d+>'=>'<controller>/view',
				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',


contoh Url yg tidak bisa terbaca :
http://xxxxxxx/site/...item/update/ABC

mohon petunjuknya. Thanks
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
0

#2 User is offline   nasrul 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 14-April 09
  • Location:Sorowako - Indonesia

Posted 05 January 2011 - 01:04 AM

View PostYiieRz {(~v~)}, on 04 January 2011 - 11:57 PM, said:

Ada masalah nih teman-teman pada saat menggunakan primaryKey (Varchar)
bukan integer (numeric).
pada saat view or update path urlnya dianggap salah

berikut urlManagernya

'<controller:\w+>/<id:\d+>'=>'<controller>/view',
				'<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
				'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',


contoh Url yg tidak bisa terbaca :
http://xxxxxxx/site/...item/update/ABC

mohon petunjuknya. Thanks


ana belum coba sih tambahin "/*"

'<controller:\w+>/<id:\d+>/*'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>/*'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

0

#3 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 05 January 2011 - 01:18 AM

View Postnasrul, on 05 January 2011 - 01:04 AM, said:

ana belum coba sih tambahin "/*"

'<controller:\w+>/<id:\d+>/*'=>'<controller>/view',
'<controller:\w+>/<action:\w+>/<id:\d+>/*'=>'<controller>/<action>',
'<controller:\w+>/<action:\w+>'=>'<controller>/<action>',



Sudah saya coba tapi masih belum berhasil.

btw, setahu saya seharusnya menggunakan <id:\w+> (karena idnya berupa varchar bukan numeric)
tapi saya coba juga tetap tidak bisa. gimana ya ?? hehehehe
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
0

#4 User is offline   nasrul 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 14-April 09
  • Location:Sorowako - Indonesia

Posted 05 January 2011 - 01:34 AM

View PostYiieRz {(~v~)}, on 05 January 2011 - 01:18 AM, said:

Sudah saya coba tapi masih belum berhasil.

btw, setahu saya seharusnya menggunakan <id:\w+> (karena idnya berupa varchar bukan numeric)
tapi saya coba juga tetap tidak bisa. gimana ya ?? hehehehe

bisa quote pesan errornya gan??
0

#5 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 05 January 2011 - 02:12 AM

View Postnasrul, on 05 January 2011 - 01:34 AM, said:

bisa quote pesan errornya gan??


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]
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
0

#6 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 05 January 2011 - 03:26 AM

gw post di forum public gak ada yg jawab. hikz
ada yg bisa bantu gak yah ????? helpppp
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
0

#7 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 05 January 2011 - 04:19 AM

View PostYiieRz {(~v~)}, on 05 January 2011 - 03:26 AM, said:

gw post di forum public gak ada yg jawab. hikz
ada yg bisa bantu gak yah ????? helpppp


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.
0

#8 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 05 January 2011 - 04:29 AM

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.
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
1

#9 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 05 January 2011 - 04:38 AM

View Postfastcrash, on 05 January 2011 - 04:19 AM, said:

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.


kalau ini sih berhasil gan, tapi tetap bermasalah jika link urlnya situs.com/item/ABC (view dari id yg varchar)
ABC dibaca sebagai action oleh url managernya, karena default dari url managernya itu
'<controller:\w+>/<action:\w>'=>'<controller>/<action>',
sedangkan untuk rules yang dibawah ini tidak akan terbaca, karena ini berlaku hanya untuk rules numeric dibelakangnya
'<controller:\w+>/<id:\d+>'=>'<controller>/view',

tapi its ok, sudah bisa gan. contoh yg diatas. #8
walaupun menurut ane kurang efektif. maaf, soalnya masih belajar neh. pusing !!! kwwkwkwk
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
0

#10 User is offline   nasrul 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 98
  • Joined: 14-April 09
  • Location:Sorowako - Indonesia

Posted 05 January 2011 - 04:48 AM

View PostYiieRz {(~v~)}, on 05 January 2011 - 02:12 AM, said:

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)

maaf, tapi gimana rendernya kalau ga lewat controller?
0

#11 User is offline   -=YiieRz=- 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 177
  • Joined: 27-October 10
  • Location:Jakarta

Posted 05 January 2011 - 05:13 AM

View Postnasrul, on 05 January 2011 - 04:48 AM, said:

maaf, tapi gimana rendernya kalau ga lewat controller?


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.
belajar itu modal utama, tanpa percobaan itu tak akan berhasil. berdoa itu membuat kita percaya diri. YiieRz-SdgBlajar
www.yiiframework.com
2

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users