yii
(jammi )
February 12, 2012, 7:36pm
1
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!
thyseus
(Thyseus)
February 12, 2012, 8:45pm
2
Probier mal:
<?php echo CHtml::link('Löschen',array('phrases/delete', 'id' => '1')); ?>
und
echo Yii::app()->request->getParam('id');
drx
(Yii)
February 13, 2012, 6:46pm
3
yii:
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',
),
),
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
qianggan
(qianggan@msn.com)
July 31, 2013, 1:26am
4
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.