0

CakePhp と JQuery Mobile を組み合わせて使用​​しようとしています。一般的にはうまく機能しますが、あるコントローラーから別のコントローラーへのリダイレクトを使用すると大きな問題が発生します。

特に RequestHandler を追加して以来。

この場合の問題は、Jquery Mobile がページ文字列全体を想定しているのに、コントローラーが単にビューを返していることだと思います。

jquery mobileでリダイレクト機能を動作させる方法はありますか?

この場合、Orderheads から Orderpositions にリダイレクトしたいと思います。

コントローラーのオーダーヘッド

    if ($this->request->is ( 'post' )) {
        $this->Orderhead->create ();
        if ($this->Orderhead->saveAll ( $this->request->data,array (
                        'deep' => true 
                ))) {
            $orderId = $this->Orderhead->findByOrdernumber( $this->request->data['Orderhead']['ordernumber']);

            $id =$orderId['Orderhead']['id'];
            $this->Session->setFlash ( __ ( 'The orderhead has been saved.' ) );


            return $this->redirect ( array (
                    'controller' => 'orderpositions', 
                    'action' => 'add', $id
            ) );
        } else {
            $this->Session->setFlash ( __ ( 'The orderhead could not be saved. Please, try again.' ) );
        }
    }

コントローラの順序

public $components = array (
        'Paginator',
        'Session',
        'RequestHandler' 
);

public function add($id = null) {
    if ($this->request->is ( 'ajax' )) {
        if ($this->RequestHandler->isAjax ()) {
            Configure::write ( 'debug', 0 );
        }
        if (! empty ( $this->data )) {
            $this->autoRender = false;
            $this->Orderposition->create ();
            if ($this->Orderposition->save ( $this->request->data )) {
                echo 'Record has been added';
            } else {
                echo 'Error while adding record';
            }
        }
    } else {
        $this->loadModel ( 'Orderhead' );
        if ($this->Orderhead->exists ( $id )) {
            $orderInformation = $this->Orderhead->findById ( $id );
        } else {
            throw new NotFoundException ( __ ( 'Invalid order id does not exists' ) );
        }
        $this->set ( compact ( 'orderInformation' ) );
    }
}
4

1 に答える 1

1

さて、私は自分で問題を解決しました。

私が考えていたのは、問題は JQuery Mobile Site にあるということでした。JQuery Mobile は通常、リンクに Ajax を使用しています。

これが問題だったというか、cakephp の flowconzept と組み合わせて使用​​するとうまくいきませんでした。Jquery は常にページ全体 (情報) を期待しているためです。これがまさに、オプション rel='external' を使用したすべてのリンクが完璧に機能した理由です。

ところで。この動作が、マルチページを使用するために jQuery-Mobile-Subpage-Widget が必要な理由です。

しかし、トピックに戻ると、controllers->redirect 関数に関する問題を解決するには、cakephp の Form-Create 関数の options パラメータに Data-Ajax='false' オプションを追加するだけで済みました。

そのパラメーターを設定すると、リンクはajax- request の代わりに full-page-requestを設定します。

例:

<?php
    echo $this->Form->create('Contactperson', array(
                            'data-ajax' => 'false'));

    echo $this->Form->input('name');
    echo $this->Form->input('surname');
    echo $this->Form->input('email');

    echo $this->Form->end(__('Submit'));
?>

これが同じ問題を抱えている他の人に役立つことを願っています。私はそのことに多くの時間を無駄にしています。

于 2014-12-15T20:49:33.073 に答える