2015-09-04 173 views
0

直到这一点我基本上一直在使用资源路由。我的路线之一是项目。如果我创建一个项目,然后表现出来,我看到一个URL中的Laravel 5刀片内的路由

myUrl /项目的形式/ 1

在一个项目展示页面,我希望能够增加一个文件。我已经建立了关系,所以一个项目可以有一个文档和一个文档属于一个项目。然后,我设置以下途径来处理文档中的数据

Route::post('projects/{id}/docOne', '[email protected]'); 

的节约所以我加入项目/ show.blade.php的一种形式,它打开像这样

{!! 
    Form::model(new App\DocOne, [ 
     'class'=>'form-horizontal', 
     'route' => ['docOne.store'] 
    ]) 
!!} 

然后我有我的表单域和一个保存数据按钮。由于我的项目展示页面中有这种新形式,所以当我现在展示一个项目时,它会抱怨未定义此新窗体的路线。

我怎样才能让这条路线在项目展示页面上工作?

感谢

+1

您是否已将路由名称定义为'docOne.store'?就像我看到的那样,你只定义URL和控制器,但是你永远不会定义你的路由名。尝试:'Route :: post('projects/{id}/docOne',array('as'=>'docOne.store','uses'=>'DocOneController @ store'))' –

+0

如果您不想要设置一个路由名称,您也可以将''route'=> ['docOne.store']'更改为:''url'=>'projects /'。{{yourId}}。'/ docOne'' ,更好,我发布我的答案 –

回答

1

首先,你需要定义一个路线名称路线,如果你想通过自己的名字来称呼它。 所以,你的路线是这样的:

Route::post('projects/{id}/docOne', [ //you need an array to set a route name 
    'as' => 'docOne.store', //here define the route name 
    'uses' => '[email protected]' //here the callback 
]); 

其次,你需要改变你的laravel形式使用您的航线名称,并设置id

{!! Form::model(new App\DocOne, [ 
    'route' => ['docOne.store', $project], //if you have setted the id variable like $id blade it gonna retturn it automatically only by passing the object, else, you can set $project->id 
    'method' => 'POST'] 
) !!} 

编辑:

你可以用”在你的视图中得到一个模型的实例。 所以部分:

{!! Form::model(new App\DocOne, 

会失败,每次trye时间,此外,格式:模型需要的是应该把你的瓦尔充满了信息的输入,应该有一个类的实例(当你编辑)。

有两种解决方法:

如果它是一个新的文件,从来没有在你的数据库 存在之前我建议改变你的

Form::model 

到:

Form::open 

如果它是一个Doc已经存在于您的数据库中,就像编辑一样,所以在您的控制器中,您需要将现有Doc作为$doc和r安置在:{!! Form::model(new App\DocOne,到:

{!! Form::model($doc, 

它的工作原理。

表单模型的创建是为了用对象实例中存在的数据填充输入值,就像编辑someting时一样。 所以你需要有一个正确的实例。 另一个人认为这是MVC作用域,视图不应该对模型具有访问权限,除非通过控制器传递。

好的就是这样。

+0

谢谢,这似乎已经修复了大多数事情。当我单击新窗体上的保存时,它现在抱怨类应用程序\ Http \ Controllers \ DocOne不存在,即使它。什么会导致这种情况?谢谢 –

+1

它的某些我认为当我发布我的答案时,这是因为视图不应该访问模型,如果它不传递控制器,它是MVC模型范围的一部分。 解决方案是将'App \ DocOne'替换为''project',就像我看到你将项目对象传递给视图一样,所以,你已经有了这个类的对象,我会改变我的答案。 –