在laravel 5中找不到输入类

时间:2015-07-20 15:57:51

标签: php json laravel artisan

我想将通过表单上传的文件保存到json文件中,因此我需要获取可以通过Request或Input类方法轻松获取的帖子数据。

问题是每当我使用请求或输入时,我都无法获取getClientOriginalName等方法来获取文件名和文件的其他参数。

我的FileController代码如下:

<?php namespace App\Http\Controllers;

use App\Http\Requests;

use Illuminate\Http\Request;            // this handles both for Input and Request as in laravel 5.1 documentation
use Illuminate\Support\Facades\Input;   // though added some classes to get work
use Illuminate\Support\Facades\File;    // though added some classes to get work
use Illuminate\Filesystem\Filesystem;   // though added some classes to get work

class FileController extends Controller
{

public function index()
{
    $files = $this->getAllData();
    return view('document.index', compact('files'));
}


public function create()
{
    return view('document.create');
}

public function store(Request $request)
{

    $name = $request->input('title');

    echo $name;

    $file = $request->file('afile');

    if($request->hasFile('afile')) {

        $file = $request->file('afile');

        print_r($file); // return array of uploaded as expected

        $filename = $file->getClientOriginalName(); // not working

        // or 

        $filename = Input::file('afile')->getClientOriginalName(); // not working

        echo $filename;
    }

    // print_r($file);

    // $data= array('title'=>$name, 'afile'=>$file);

    // $this->create_entry($data);

    // return redirect('document');
}
}

仅供参考我的文件上传成功,文件数组为

Array ( [0] => Symfony\Component\HttpFoundation\File\UploadedFile Object ( [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => new_file_1.txt [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => text/plain [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0 [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0 [pathName:SplFileInfo:private] => E:\xampp\tmp\php5680.tmp [fileName:SplFileInfo:private] => php5680.tmp ) )

唯一的问题是虽然使用了

,但我无法获得Symphon2 API的方法
use Input;

use Illuminate\Support\Facades\Input;

输入的每种方法都无法检查其有效性。

我提到的每个教程或laravel 5中的文档都与我在代码中使用的相同。 所以任何建议或解决方案都非常感激。

this文档中使用的函数正在运行,但除此之外没有其他方法。

4 个答案:

答案 0 :(得分:1)

您缺少输入外观的use语句。将以下内容添加到您的使用语句中。

use Illuminate\Support\Facades\Input;

答案 1 :(得分:1)

你可以试试这个:

$filename = $file->getClientOriginalName();

由于您已经使用了以下内容:

$file = $request->file('afile');

file方法返回Symfony\Component\HttpFoundation\File\UploadedFile的实例,在这种情况下,实例已经缓存在$file变量中。

另外,为了确保上传成功,您可以使用以下内容进行检查:

if($request->hasFile('afile')) {

    $file = $request->file('afile');

    $filename = $file->getClientOriginalName() .'.'. $file->getExtension();
}

答案 2 :(得分:0)

这对我有用

\Input::file('file')->getClientOriginalName();

答案 3 :(得分:0)

在表单中打开标记添加'files' => true

{!! Form::open(array('files' => true, ....)) !!}

在控制器中首先检查文件是否已正确上载

if (!Input::file('afile')->isValid())
{
    // return error 50x
}

$filename = Input::file('afile')->getClientOriginalName();

不能将方法应用于非对象意味着Input :: file(...)返回null,因此文件没有上传或者没有上传。存在。然后,当您从空值中调用->getClientOriginalName()时,php会抛出异常。