actionUpdate retornando Erro 400

Olá Amigos…

Criei o CRUD de uma aplicação e tudo funciona corretamente com exceção do Update e Delete.

Utilizo url amigaveis e o endereço final fica desta forma:

http://localhost/app/paineis/update/12

Porém, verifiquei que não está chegando o id.

UrlManager está desta forma:




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

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

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



actionUpdate do Controller:




public function actionUpdate($id)

{

	$model=$this->loadModel($id);


	// Uncomment the following line if AJAX validation is needed

	//$this->performAjaxValidation($model);


	if(isset($_POST['Paineis']))

	{

		$model->attributes=$_POST['Paineis'];

		if($model->save())

			$this->redirect(array('view','id'=>$model->pai_id));

	}


	$this->render('update',array(

               'model'=>$model,

        ));

}



Verifiquei estes posts:

http://www.yiiframework.com/forum/index.php/topic/20807-error-400/page__p__101931__hl__error+400#entry101931

http://www.yiiframework.com/forum/index.php/topic/31448-error-400-on-update-and-view-actions/page__p__151449__hl__error+400#entry151449

e pelo que vi foi constatado o erro realmente… mas, alguém teve este problema e conseguiu contornar?

Obrigado pessoal.

Kleber,

Posta pra nós a "function loadModel(){}".

Está na mão Newerton…

Foi gerada automaticamente na criação do CRUD pelo Gii.




public function loadModel($id)

{

	$model=Paineis::model()->findByPk($id);

	if($model===null)

		throw new CHttpException(404,'The requested page does not exist.');

	return $model;

}



Newerton,

Você havia perguntado sobre a function loadModel…

Isso me deu um estalo e revi todos os métodos e funções do controller. Eu havia feito isto, mas passou aos meus olhos um erro.

Constatei que a actionView estava recebendo um parâmetro errado.

Ao invés de receber $id, estava como $painelID…

Código correto:




public function actionView($id)

{

		$this->render('view',array(

			'model'=>$this->loadModel($id),

		));

}



Works like a charm… Como dizem os gringos…rss

Para ajudar aos próximos que fizerem cagada algo errado, como eu fiz, ou desejarem realmente mudar o nome do atributo por algum motivo e estejam utilizando o urlManager deixo uma dica:

Altere no main.php o "nomedoparametrodesejado" abaixo.




'urlManager'=>array(

	'rules'=>array(			

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

	),

),



Obrigado pela indicação do caminho Newerton.