为模型重组数据库和多个视图

时间:2016-04-19 12:19:02

标签: laravel laravel-5 laravel-5.1

我有一个系统,用户可以将数据输入各种表单并生成自定义文档。当我设置所有内容时,因为每个表单都有唯一的数据,我为每种类型的文档创建一个模型/控制器,例如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()

1 个答案:

答案 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]);
                }
            }
        }
    }