我有一个我一直在研究的Web应用程序项目,除了在资源上提交标志外,大多数应用程序功能都有效。我想使用模态表单将数据提交到数据库,然后在Flagged视图页面上显示所有标记的资源Name & Description
(来自Resources表)Flag_Reason & Other_Comments
(来自Flagged表)我有它工作到它只提交Flag_Reason and Other_Comments
的地方,而不是更新我的资源表。我相信我现在遇到路由问题,因为在更改我的函数以更新我的资源表并在数据库中创建一个新的Flag条目后我得到一个像这样的错误
Missing argument 1 for App\Http\Controllers\FlagsController::addFlag()
这是我的一些代码,希望有人可以帮助我最终一劳永逸地解决这个问题。
路线
Route::get('resource', array('as'=>'viewResource', 'uses' => 'ResourceController@resource'));
Route::get('flags', 'FlagsController@index');
Route::post('resource', ['as' => 'resource', 'uses'=>'FlagsController@addFlag']);
///Route::post('resource', ['as' => 'resource', 'uses'=>'FlagsController@postFlag']);///
This route works fine, and only inserts the Flagged table data into the database.
如果我将路线修改为Route::post('resource/{Resource_ID}', ['as' => 'resource', 'uses'=>'FlagsController@addFlag'])
我收到这样的错误
Missing required parameters for [Route: resource] [URI: resource/{Resource_ID}].
标志控制器
class FlagsController extends Controller
{
public function index()
{
$resources = Resources::where('Flagged', 1)->with('flags')->get();
return view('pages.flags', ['resource' => $resources]);
}
public function addFlag($id)
{
$flag = Flagged::create(Request::all());
$resource = Resources::findOrFail($id);
$resource->update(array('Flagged' => 1));
$resource->flags()->attach([$flag->id]);
dd($resource::all());
return back();
}
//////// This function inserts only the Flagged table data into the Flagged table, It doesnt do what I want it to do, so i've commented it out/////
public function postFlag()
{
$flag = Flagged::create([
'Flag_Reason' => Input::get('reason'),
'Other_Comments' =>Input::get('comments')]);
$flag->save();
\Session::flash('flash_message', 'Flagged!');
return redirect('resource');
}
}
资源视图
...
@foreach($resources as $resource) @foreach ($resource->locations as $location)
<tr>
<td> <a class="btn btn-small btn-default" style="float:right; margin-right:5px;" href="{{ URL::to('resource/addToCart/' .$resource->Resource_ID) }}">+</a> {{ $resource->Name }}</td>
<td>{{ $resource->Description }}</td>
<td>{{ $location->Address }}</td>
<td>{{ $location->City }}</td>
<td>{{ $location->Zip_Code }}</td>
<td>{{ $location->County }}</td>
<td>
<button type="button" class=" msgBtn btn btn-default" style=" display:inline; margin-right:auto;"><a href="pages/editresources/{{$resource['Resource_ID']}}">Edit</a>
</button>
<button type="button" id="submitFlag" class=" msgBtn btn btn-default" style=" display:inline; margin-right:auto;"><a href="#flagResource" data-toggle="modal" data-resource-id="{{ $resource->Resource_ID }}" data-resource-name="{{ $resource->Name }}">Flag</a>
</button>
<button type="button" class=" msgBtn3 btn btn-default pull-right" style="display:inline; margin-right:auto;"><a href="pages/deleteResource/{{$resource['Resource_ID']}}">Delete</a>
</button>
</td>
</tr>
@endforeach
@endforeach
模态,在资源视图中
<div class="modal fade" id="flagResource" tabindex="-1" role="dialog" aria-labelledby="flagModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span></button>
<h4 class="modal-title"
id="flagResourceLabel" style="text-align:center;"> Flagged
</h4>
</div>
<div class="modal-body">
{!! Form::open(array('route'=>'resource', 'class'=>'form', 'method'=>'POST')) !!}
<div class="form-group">
<label for="reason" class="control-label">Reason for Flagging:</label>
{!! Form::text('reason', null, array('class'=> 'form-control', 'placeholder'=>'Reason')) !!}
</div>
<div class="form-group">
<label for="comments" class="control-label">Other Comments:</label>
{!! Form::text('comments', null, array('class'=> 'form-control', 'placeholder'=>'Comments')) !!}
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<span class="pull-right">
<button id="submitFlag" type="submit" class="btn btn-primary" style="margin-left:5px;">Flag</button>
</span>
</div>
{!! Form::close() !!}
</div>
</div>
</div>
<script>
$('#flagResource').on('show.bs.modal', function(e) {
//var submitFlag = $(e.relatedTarget);
var resourceName = $(e.relatedTarget).data('resource-name');
var resourceId = $(e.relatedTarget).data('resource-id');
var modal = $(this);
modal.find('.modal-title').text(resourceName);
});
</script>
我认为正在发生的问题是我在模态中打开的表单
{!! Form::open(array('route'=>'resource', 'class'=>'form', 'method'=>'POST')) !!}
,我的addFlag
函数接受一个ID,但我的资源路由上不需要{id}。
如果有人可以查看我的路线并帮我调试,那就太好了。提前谢谢。
答案 0 :(得分:0)
您需要保留路线的方式,以便它通过Resource_ID
但是您需要在设置表单时传递它。
{!! Form::open(array('route'=>'resource' array('Resource_ID' => $yourId), 'class'=>'form', 'method'=>'POST')) !!}
关于您的评论,并仔细查看您的代码,我认为重新考虑其工作方式可能是有意义的。
您正在将多个资源传递给此视图,因此我认为像我最初建议的那样将资源ID添加到URL并不是最好的主意,因为它需要是动态的,具体取决于所点击的资源和URL不是最简单的方法是通过javascript进行更改。
我认为更好的解决方案是返回使用Form::open(array('route'=>'resource', 'class'=>'form', 'method'=>'POST')) !!}
,然后从您的路线中移除/{Resource_ID}
部分,并从$id
移除public function addFlag()
,因为我们不再通过URL传递它。
然后在表单中,为resource_id
添加一个隐藏的有效内容<input type="hidden" name="resource_id" id="resource_id" value="" />
然后你已经在监听bootstrap show事件并获取正确的资源ID,我们只需要将它添加到值中。
$('#flagResource').on('show.bs.modal', function(e) {
//var submitFlag = $(e.relatedTarget);
var resourceName = $(e.relatedTarget).data('resource-name');
var resourceId = $(e.relatedTarget).data('resource-id');
var modal = $(this);
modal.find('.modal-title').text(resourceName);
$('#resource_id').val(resourceId);
});
在您的addFlag()
方法中,您可以通过...
$id = \Input::get('resource_id');
答案 1 :(得分:0)
FlagsController中的addFlag函数接受一个名为$ id的参数,您接收的异常是因为您忘记将参数添加到路径中。
Route::post('resource', ['as' => 'resource', 'uses'=>'FlagsController@addFlag']);
应该
Route::post('resource/{id}', ['as' => 'resource', 'uses'=>'FlagsController@addFlag']);
我认为Laravel Route参数是特定于名称的,这就是 {Resource_ID} 不起作用的原因。
您可以在Laravel here中阅读有关使用参数进行路由的详细信息 至于资源视图中的模态,您还需要传递要在表单上更新的资源的参数
{!! Form::open(array('route'=>'resource', array('id' => $yourIdHere), 'class'=>'form', 'method'=>'POST')) !!}
确保将 $ yourIdHere 替换为您想要的资源。
其他一切似乎都是有序的。