0

追加アクションのあるコントローラーがあります。

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';
}

このアクションに管理プレフィックスを追加するまで、すべてがうまくいきました。アクションがpublic function add()という名前の場合– すべてが機能します。アクションの名前が *public function admin_add()* の場合 – Js ヘルパーは地区の変更時に道路リストの更新を停止します。

4

1 に答える 1

1

これについて100%確信はありませんが、JSヘルパーがAJAXリクエストを行うときにadminプレフィックスを保持していると思います。add()の場合、getByDistrict()を呼び出します。admin_add()の場合、admin_getByDistrict()を呼び出します。'admin'=>falseをJs->requestに渡してみてください。

于 2012-12-17T19:30:20.893 に答える