我的控制器有一个添加动作。
public function add() {
$this->layout = 'manage';
$this->set($this->Restaurant->fetchRelatedData());
if ($this->request->is('post')) {
$this->Restaurant->create();
if ($this->Restaurant->save($this->request->data)) {
$this->Session->setFlash('ok!');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Error!');
}
}
}
使用Form和Js帮助程序创建此操作的视图:
echo $this->Form->create('Restaurant');
// some fields
echo $this->Form->input('district_id', array('label' => 'District'));
echo $this->Form->input('street_id', array('label' => 'Street'));
// other fields
echo $this->Form->end(array('label' => 'Add'));
$this->Js->get('#RestaurantDistrictId')->event('change',
$this->Js->request(array(
'controller'=>'streets',
'action'=>'getByDistrict'
), array(
'update'=>'#RestaurantStreetId',
'async' => true,
'method' => 'post',
'dataExpression'=>true,
'data'=> $this->Js->serializeForm(array(
'isForm' => true,
'inline' => true
))
))
);
Js助手显示列表中包含选定区域的街道。
StreetsController - > getByDistrict操作:
public function getByDistrict(){
$district_id = $this->request->data['Restaurant']['district_id'];
$streets = $this->Street->find('list', array(
'conditions' => array('Street.district_id' => $district_id),
'fields' => array('street'),
'order' => array('Street'),
'recursive' => -1,
));
$this->set('streets', $streets);
$this->layout = 'ajax';
}
在我为此操作添加管理前缀之前,一切正常。 如果action被命名为 public function add() - 一切正常。 如果操作被命名为* public function admin_add()* - Js helper在区域更改时停止更新街道列表。
答案 0 :(得分:1)
我对此并不是100%肯定,但我相信JS助手在发出AJAX请求时会保留admin前缀。在add()中,它将调用getByDistrict()。在admin_add()中,它将调用admin_getByDistrict()。尝试传递'admin'=>错误进入Js->请求。