是否可以从Laravel中的方法将数组对象返回到同一视图?

时间:2017-11-07 23:52:28

标签: php laravel-5

我是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' );

这种情况是否可以实现,还是我需要做一些不同的事情?

1 个答案:

答案 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将其添加到表单中的字段。那部分我将留给你,但至少应该让你到达你想去的地方。