我是Laravel的新手,因此我正在努力整理我的第一个Laravel Web应用程序。但是,我在以下情况下陷入了困境:
我有一个页面请求文件输入并有一个处理按钮。选择文件并单击进程后,我将路由到ConversionController@evaluateFile
以处理有关该文件的信息。在这个方法中,我构建了一个数组$file
,我想返回到原始视图(home),以在页面顶部显示文件详细信息。我还想在评估文件时显示动画。
目前我正在尝试这个:
return view( 'home' )->with( 'file', $file );
在我的控制器的末尾,看起来好像它让我回到同一个视图,但我的刀片变量中没有任何内容。如果我只是使用return $file
返回数组,我可以看到数组已正确填充。
我的视图有以下代码来容纳数组:
@if( ! empty( $file->name ) )
<p>{{ $file->name }}</p>
<hr>
@endif
我还分配了以下路线:
Route::get( 'home', 'ConversionController@index' );
Route::post( 'home', 'ConversionController@evaluateFile' );
Route::post( 'process', 'ConversionController@evaluateFile' );
这种情况是否可以实现,还是我需要做一些不同的事情?
答案 0 :(得分:0)
首先,将同一方法分配给多个路由并不是一个好习惯,只有一个路由,在这种情况下,process,是处理文件的路径。其次,对于你要找的东西,我建议使用Jquery和Ajax代替。对于你要求的东西,我会建议这些内容:
$.ajax({
url: '/process',
method: 'POST',
dataType: 'json',
beforeSend: function(){
//Loading Animation goes in here, I usually use a
//modal with a loading animation myself
},
success:function(json){
//Use Jquery to modify your page with the results here
}
});
没什么太难的。我不确定你是否熟悉Jquery,但它非常易于使用和学习。如果您对JSON更加大胆/熟悉,您也可以将dataType
切换为json
而在success函数参数中,使用从控制器传递的json数据并修改它你希望。
更新:运行ajax时,您需要确保表单上的任何默认操作都不会运行,以便ajax能够不间断地运行。举个例子,我假设您使用表单上传文件,我将自己给这个表单id="fileupload"
:
$('#fileupload').submit(function(e){
e.preventDefault(); //This will take whatever default action
//was going to be performed, and stop it from running, in this case, the form submission
//Run Ajax code in here
});
我还从前一篇文章中将html
更改为json
,以声明我们正在将json数据传递回success函数。为了做到这一点,在处理数据的控制器内部,您需要将要传递回的所有内容添加到ajax中,然后将其添加到数组中,然后转换为json,如下所示:
public function processFile(Request $request){
$return = array();
$name = $request->file(name_of_file_field_input)->getClientOriginalName();
if(isset($name) && !empty($name)){
$return['name'] = $name;
}
return json_encode($return);
}
然后,在success函数内部,您可以使用json参数并使用点表示法来获取名称:
success:function(json){
alert(json.name);
}
您可以使用名称执行任何操作,包括使用Jquery将其添加到表单中的字段。那部分我将留给你,但至少应该让你到达你想去的地方。