2016-03-24 13 views
0

で別のページに関連したレコードのフォームを作成します。私はこのモデルを持っているCakePHPの

School hasMany Teachers 

私は「この学校のための新しい先生を追加」配置する必要があり、私の学校コントローラ、上のビューアクション/ページを持っていますリンク。このリンクは教師のページを追加する必要があり、新しい教師は前のページの学校を参照する必要があります。私は次のように、私のリンクにクエリ文字列を追加することでこれをやっている

<a href="/teachers/add?school_id=4">Add new teacher for this school</a> 

はその後、私のTeachersControllerに私は$ school_idとして私の見解(先生:: add.ctp)にこの値を渡すと作成します以下のようなadd.ctpの隠し入力:私は先生がフォームを追加提出するので

$this->hidden('school_id', ['value' => $school_id]) 

は、そのschool_idフィールドが正しく設定されています。

これを行うより良い方法はありますか?私は私のソリューションとクエリ文字列トリックに本当に満足していない(1つは、アドレスバーでこれを変更することができます...)。

ありがとうございます

答えて

1

私はあなたの行動に何らかの形で情報を渡す必要があると思います。代わりに、フォーム(このためformlink()方法を持っているFormHelperのケーキ)を使用して、POSTデータを使用している場合でも、多くの方法は、ユーザがデータを変更する可能性が残っています。とにかくPOST

経由school_idを渡すことができ、リンクの

ここでわかる問題は、非表示のフィールドを使用することです。私はあなたが/teachers/add?school_id=4にデータを送信するときは、すでにあなたのクエリデータに

この情報を持っているので、それはあなたがあなたが私は私の隠された入力を取り除くことができ、右だ

$teacher = $this->Teachers->newEntity() 
$teacher = $this->Teachers->patchEntity($teacher , $this->request->data); 
$teacher->school_id = $this->request->query('teacher_id'); 
+0

を行うことができます冗長だと思います。私の問題は何らかのコンテキストを維持することだと思うので、Sessionコンポーネントを使って私のschool_idを保存して消費するのはどうですか?それはよりクリーンな方法だろうか?私は私の学校でそれを設定することができます:::アクションを見て、私の教師でそれを消費::追加... – Flo

+1

別のブラウザのタブで別の学校を開くとどうなりますか?最後に開いたタブは 'schoold_id'をセッションに保存します。しかし、最初に開いたタブに移動して[先生を追加]をクリックすると、最後の学校に先生を追加し終わります。 – arilia

+0

実際には悪い考えです。)...私の使用例では、この状況は起こりません。 – Flo

関連する問題