在我添加前缀到操作后,JS帮助程序停止工作

时间:2012-12-17 18:58:42

标签: php cakephp

我的控制器有一个添加动作。

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在区域更改时停止更新街道列表。

1 个答案:

答案 0 :(得分:1)

我对此并不是100%肯定,但我相信JS助手在发出AJAX请求时会保留admin前缀。在add()中,它将调用getByDistrict()。在admin_add()中,它将调用admin_getByDistrict()。尝试传递'admin'=>错误进入Js->请求。