Delete Action im Controller lässt keinen anderen Parameter aus ID zu

Hi,

ich bin grad dabei meine "Delete" Action zu bearbeiten.

Meiner delete Action übergebe ich folgende Parameter




<?php echo CHtml::link('Löschen',array('phrases/delete', 'ids' => '1')); ?>



Meine Delete-Action




public function actionDelete($id)

{

	echo Yii::app()->request->getParam('ids');

}



Meine Fehlermeldung

"Error 400

Your request is invalid.

"

In meinen rules habe ich den Paremeter auch mit aufgenommen




'urlManager'=>array(

	'urlFormat'		=>	'path',

	'showScriptName'=>	false,

	'caseSensitive'	=>	false,


	'rules'			=>	array(

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

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

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

		'phrases/delete/<ids:[0-9]+>'	=> 'phrases/delete',

	),

),



Wenn ich die URL aufrufe mit id als Paremeter, dann funktioniert alles!

Ich frage mich aber warum? Wo ist das standmäßig definiert, dass ID immer gilt und warum kann ich keine eigene Parameter definieren?

thx!

Probier mal:




<?php echo CHtml::link('Löschen',array('phrases/delete', 'id' => '1')); ?>



und




  echo Yii::app()->request->getParam('id');



:slight_smile:

Die Regel


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



fängt bereits vor dieser Regel die Anfrage ab:


 'phrases/delete/<ids:[0-9]+>'   => 'phrases/delete',



Der Parameter ist damit id und nicht ids.

Die extra Regel für phrases benötigst du nicht, wenn du id als Parameter in deinem Controller verarbeitest.

Übrigens: [0-9]+ entspricht \d+

KISS & DRY

drx

Please note, Your delete action was not working, and got the below error:

"Error 400

Your request is invalid."

It’s because Yii filters setting:




	 /**

	 * @return array action filters

	 */

	public function filters()

	{

		return array(

			'accessControl', // perform access control for CRUD operations

			'postOnly + delete', // we only allow deletion via POST request

		);

	}



If you remove this then, you should be able to use your code, but it’s dangerous which allow the delete action from url.