我有一个系统,用户可以将数据输入各种表单并生成自定义文档。当我设置所有内容时,因为每个表单都有唯一的数据,我为每种类型的文档创建一个模型/控制器,例如BriefDocument,InvoiceDocument等。
我很快发现这变得非常混乱,模型和控制器太多了。创建新文档类型也花了很长时间。因此,我重新安排了我的数据库。
我现在有一个Document模型和一个DocumentData模型。文档可以包含许多文档数据。我想象这样的事情
Route::model('projects.document', 'Document');
Route::resource('projects.document', 'DocumentController', ['except' => ['index', 'show']]);
这样做应该允许我仅使用这两个模型创建任何类型的文档。我的第一个问题是,我已按如下方式设置路线
<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();
}
所以这将调用我的DocumentController
中的create函数Missing argument 2 for App\Http\Controllers\DocumentController::create()
我在这个函数中尝试做的是首先确定是否已经为此Project创建了相同的Document,因为Project只能有很多文档,但没有重复文档。
如果我这样做,我会
Route::model('projects.document', 'Document');
Route::get('projects/{projects}/document/{name}', array('as' => 'projects.document.create', 'uses' => 'DocumentController@create'));
但是我没有在link_to_route中传递争论2吗?从我所看到的,这是传递我的Project实例,以及字符串Briefing Document。
为什么我会收到此错误?
由于
更新 如果我明确设置它的工作路线,例如。
$location.path()
答案 0 :(得分:1)
您收到此错误,因为您未将create()
变量传递给Request
操作。
问题可能出在<li>{!! link_to_route('projects.document.create', 'Brief Document', ['project_id' => $project->id, 'name' => Brief Document')) !!}</li>
本身。此方法是RESTful控制器的一部分,看起来它只是为了接受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();
}
public IHttpActionResult PostNewTeam(Team team)
{
teams.Add(team);
// Console.WriteLine("Post Team: " + team.ToString());
return this.StatusCode(HttpStatusCode.Created);
}
行动:
/// <summary>
/// The shared resource dictionary is a specialized resource dictionary
/// that loads it content only once. If a second instance with the same source
/// is created, it only merges the resources from the cache.
/// </summary>
public class SharedResourceDictionary : ResourceDictionary
{
/// <summary>
/// Internal cache of loaded dictionaries
/// </summary>
public static Dictionary<Uri, ResourceDictionary> _sharedDictionaries =
new Dictionary<Uri, ResourceDictionary>();
/// <summary>
/// Local member of the source uri
/// </summary>
private Uri _sourceUri;
/// <summary>
/// Gets or sets the uniform resource identifier (URI) to load resources from.
/// </summary>
public new Uri Source
{
get { return _sourceUri; }
set
{
_sourceUri = value;
if (!_sharedDictionaries.ContainsKey(value))
{
// If the dictionary is not yet loaded, load it by setting
// the source of the base class
base.Source = value;
// add it to the cache
_sharedDictionaries.Add(value, this);
}
else
{
// If the dictionary is already loaded, get it from the cache
MergedDictionaries.Add(_sharedDictionaries[value]);
}
}
}
}