2016-04-19 9 views
1

私は、ユーザーがさまざまなフォームにデータを入力してカスタムドキュメントを生成できるシステムを持っています。私がすべてを設定すると、各フォームに固有のデータがあるので、ドキュメントの各タイプごとにモデル/コントローラを作成します。ブリーフィングドキュメント、InvoiceDocumentなどデータベースの再構成とモデルの複数のビュー

私はすぐにこれが非常に乱雑になりすぎ、モデルとコントローラがあまりにも多くなったことを発見しました。また、新しい文書型を作成するにはかなりの時間がかかりました。このように、私は自分のデータベースを再編成しました。

私は今Document ModelとDocumentDataモデルを持っています。ドキュメントは多くのドキュメントデータを持つことができます。

Document 
+----+---------------+-----------------+ 
| id | name   | description  | 
+----+---------------+-----------------+ 
| 1 | BriefDocument | Something  |  
+----+---------------+-----------------+ 

DocumentData 
+----+--------------+-----------------+--------------+ 
| id | key   | value   | documentId | 
+----+--------------+-----------------+--------------+ 
| 1 | whatData  | inputted data | 1   | 
+----+--------------+-----------------+--------------+ 
| 2 | whoData  | inputted data | 1   | 
+----+--------------+-----------------+--------------+ 
| 3 | whyData  | inputted data | 1   | 
+----+--------------+-----------------+--------------+ 
| 4 | howData  | inputted data | 1   | 
+----+--------------+-----------------+--------------+ 

これを行うと、これら2つのモデルだけを使用して任意の種類のドキュメントを作成することができます。私の最初の問題はこれである私は、ユーザーが、彼らが作成した文書の種類を選択することができますドロップダウンを持っているページで

Route::model('projects.document', 'Document'); 
Route::resource('projects.document', 'DocumentController', ['except' => ['index', 'show']]); 

を次のように、私はルートを設定しています。ドロップダウンだから、これは私のDocumentController内の関数を作成して呼び出します。この

<li>{!! link_to_route('projects.document.create', 'Brief Document', array($project->id, 'Brief Document')) !!}</li> 

のようなものを持っている

public function create(Project $project, $name) 
{ 
    $briefDocument = Document::where('projectId', '=', $project->id) 
     ->where('name', '=', $name) 
     ->first(); 
} 

私が最初に同じ文書がすでに作成されているかどうかを確認され、この関数でやろうとしていますこのプロジェクトでは、プロジェクトには多数のドキュメントしか存在しないが、繰り返しのドキュメントは存在しないためです。

私はしかし、これを行う場合、私は

Missing argument 2 for App\Http\Controllers\DocumentController::create() 

を取得しかし、私はそれがlink_to_route内2をarguement渡していないのですか?私は見ることができますが、これは私のプロジェクトインスタンスとブリーフィングドキュメントの文字列を渡しています。

なぜこのエラーが発生しますか?私は明示的にルートを設定した場合が、それは、例えば作品

おかげ

UPDATE

Route::model('projects.document', 'Document'); 
Route::get('projects/{projects}/document/{name}', array('as' => 'projects.document.create', 'uses' => '[email protected]')); 

答えて

1

あなたはcreate()アクションに$name変数を渡さないので、あなたは、このエラーを取得しています。

多分問題はcreate()にあります。この方法では、RESTfulなコントローラの一部であり、それが唯一のRequestオブジェクトを受け入れるように設計されたように見えるので、これ試してみてください。

<li>{!! link_to_route('projects.document.create', 'Brief Document', ['project_id' => $project->id, 'name' => Brief Document')) !!}</li> 

そしてcreate()アクション:

public function create(Request $request) 
{ 
    $id = $request->get('project_id'); 
    $name = $request->get('name'); 

    $briefDocument = Document::where('projectId', '=', $project->id) 
     ->where('name', '=', $name) 
     ->first(); 
} 
+0

私も私のlink_to_routeでそれをやっておりませんが?どこに渡すべきですか?ありがとう –

+0

あなたは '$ project-> id'を渡していますが、' $ project'オブジェクトを期待しています。オブジェクトを渡すか、 'Project $ project'を' $ id'に変更してみてください。 –

+0

パラメータ2についてまだ不満があります –

関連する問題