0

Cakephp 2.1では、この構造を使用して、保存時にデータをインターセプトしました。

$this->request->data['Setup']['active'] = 1;  

ここで、レコード(Dir)を編集した後、次の方法で親IDを取得して、その親(project_id)にリダイレクトします。

$ownParentId = $this->request->data['Dir']['project_id'];

ただし、ここで渡される値が取得されていないだけです。

$this->redirect(array('controller' => 'projects', 'action' => 'edit', $ownParentId));

だから私のリダイレクトは失敗します。

=============返信後==============
次の理由により、project_idがまったく移動していないようです。

私のディレクトリ編集フォームで私はコメントしました:

//echo $this->Form->input('project_id');

ユーザーはプロジェクトIDを変更してはならないからです。

その行のコメントを外そうとしましたが、フォームには何も投稿されない空またはnullの選択コントロールが表示されます。どういうわけか非表示または無効にできる編集コントロールを期待していました。

私のdirsテーブルのフィールドproject_id

CREATE TABLE IF NOT EXISTS `dirs` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `project_id` int(10) NOT NULL,
  ....  


プロジェクトテーブルのidフィールドに 関連付けられています:

CREATE TABLE IF NOT EXISTS `projects` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`name` varchar(200) NOT NULL,
`pr_number` varchar(10) NOT NULL,
`client_id` int(5) NOT NULL,
`exec_id` int(5) NOT NULL,
 ....  

プロジェクトモデル

var $hasMany = array('Daily', 'Dir');

dirモデル

var $belongsTo = array('Project');

おそらく、編集フォームにproject_idコントロールを設定するために、素敵なfind()構造が必要ですか?-または-
編集を保存する前にproject_id値を取得しますか?(projectt_idは編集されているため、すでに保存されています。
完全なdirsコントローラーをhttp://carlosgarcia.us/support/DirsController.txtに投稿しました。

手伝ってくれますか?どうもありがとうございます。

カルロス

4

1 に答える 1

1

子レコードを編集または削除した後にリダイレクトするには、最初に親IDを取得しました(コントローラーのedit / deleteメソッド)

     $ownParentId = $this->Dir->find
                    (
                    'first', array
                (
                // recursive 0 so no child tables travel, use 1 to retrieve ALL tables  
                'recursive' => 0,
                'fields' => array('Dir.project_id'),
                'conditions' => array('Dir.id' => $id)
                    )
    );

保存後にリダイレクトします。

$this->redirect(array('controller' => 'projects', 'action' => 'edit', $ownParentId['Dir']['project_id']));

子を追加した後に親レコードにリダイレクトするのは少し注意が必要でした-私にとってはダミーです-

1.-私の見解では、[追加]リンクからparentProjectというパラメーターが送信されました。

echo $this->Html->link(__('Add'), array('controller' => 'dirs', 'action' => 'add', 'parentProject' => $project['Project']['id']));  

2.-私の子コントローラーで、このパラメーターを配列に設定します(メソッドの追加):

$this->set('parentProject', $this->request->params['named']['parentProject']);

3.-保存する前に、子レコードのフィールド値を設定します。

$this->request->data['Dir']['project_id'] = $this->request->params['named']['parentProject'];  

4.-そして、保存後にリダイレクトするために同じ値を使用しました:

$this->redirect(array('controller' => 'projects', 'action' => 'edit', $this->request->data['Dir']['project_id']));  

さらに、この方法により、子を追加/編集するときに親モデルから必要なすべてのデータを利用できるようになりました。

   $ProjectData = $this->Dir->Project->find
                    (
                    'first', array
                (
                // recursive 0 so no child tables travel, use 1 to retrieve ALL tables  
                'recursive' => 0,
                'fields' => array('Project.name', 'Project.pr_e_start'),
                'conditions' => array('Project.id' => $this->request->params['named']['parentProject'])
                    )
    );

    $this->set(compact('ProjectData'));

それがうまくいったことをうれしく思い、私のような苦労しているスターターのために共有したいと思いました。

カルロス。

于 2012-06-14T04:26:14.763 に答える