Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对非对象上的成员函数的Laravel调用_Php_Oop_Laravel - Fatal编程技术网

Php 对非对象上的成员函数的Laravel调用

Php 对非对象上的成员函数的Laravel调用,php,oop,laravel,Php,Oop,Laravel,我在stack上搜索了很多类似的问题 但是,我确信我正在使用一个对象,并且已经在转储中验证了这一点 错误 # Process Images - Queue? if ($filesUploaded) { $images = Input::file('images'); foreach ($images as $image) { # Record Creation $record = new Image; $record->use

我在stack上搜索了很多类似的问题

但是,我确信我正在使用一个对象,并且已经在转储中验证了这一点

错误

# Process Images - Queue?
if ($filesUploaded) {
    $images = Input::file('images');
    foreach ($images as $image) {
        # Record Creation
        $record = new Image;
        $record->user_id = Auth::id();
        $record->ad_id = $adId;
        $record->name = Str::random();
        $record->save();
        # Create TN
        $record->createTN($image);
        # Create Smalls
        # Create Larges
    }
}
>16:对非对象调用成员函数getRealPath()

第16行

$image->getRealPath()

Var Dump$image

object(Symfony\Component\HttpFoundation\File\UploadedFile)#9 (7) { ["test":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> bool(false) ["originalName":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> string(41) "5a862f92da957da3e0208357ce006afd_970x.jpg" ["mimeType":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> string(10) "image/jpeg" ["size":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> int(346047) ["error":"Symfony\Component\HttpFoundation\File\UploadedFile":private]=> int(0) ["pathName":"SplFileInfo":private]=> string(24) "C:\xampp\tmp\phpA5C7.tmp" ["fileName":"SplFileInfo":private]=> string(11) "phpA5C7.tmp" } 
如果我转储
$image->getRealPath()我得到一个
字符串(24)“C:\xampp\tmp\phpE193.tmp”
,这就是我想要的。我不知道为什么它说$image不是一个对象,而它显然是一个对象

控制器

# Process Images - Queue?
if ($filesUploaded) {
    $images = Input::file('images');
    foreach ($images as $image) {
        # Record Creation
        $record = new Image;
        $record->user_id = Auth::id();
        $record->ad_id = $adId;
        $record->name = Str::random();
        $record->save();
        # Create TN
        $record->createTN($image);
        # Create Smalls
        # Create Larges
    }
}
图像类

public function createTN($image) {
    $PUBLIC_PATH = public_path();

# Load Zebra Image Library
require_once $PUBLIC_PATH.'/uploads/Zebra_Image.php';

$destinationPath = $PUBLIC_PATH.'/uploads/thumbnails/';
$tn = new Zebra_Image();
$tn->source_path = $image->getRealPath();
$tn->target_path = $destinationPath.$this->name.'_sm.jpg';
$tn->jpeg_quality = 60;
$tn->preserve_aspect_ratio = true;
$tn->enlarge_smaller_images = true;
$tn->resize(100, 100, ZEBRA_IMAGE_CROP_CENTER);
}

您的一个图像可能未设置。因此,当您使用
var\u dump
检查(第一个)时,一切似乎都正常。但是当完整循环运行时,它会在第二个、第三个。。。迭代

这应该可以解决这个问题:

foreach ($images as $image) {
    if(!is_object($image)) continue;
    # Record Creation
    $record = new Image;
    $record->user_id = Auth::id();
    $record->ad_id = $adId;
    $record->name = Str::random();
    $record->save();
    # Create TN
    $record->createTN($image);
    # Create Smalls
    # Create Larges
}

查看原始循环

$images = Input::file('images');
foreach ($images as $image) {
    # Record Creation
    $record = new Image;
    $record->user_id = Auth::id();
    $record->ad_id = $adId;
    $record->name = Str::random();
    $record->save();
    # Create TN
    $record->createTN($image);
    # Create Smalls
    # Create Larges
}
看起来您处理的请求不止一个文件上载。您用来发布到此Laravel路由的表单、javascript代码或flash上传程序代码看起来似乎至少发送了一个Laravel的请求对象无法处理的文件(或者可能是一个空白文件条目)。像这样的循环可能会揭示出更多正在发生的事情

foreach($images as $image)
{
    var_dump($image);
}
大多数对象都是
Symfony\Component\HttpFoundation\File\UploadedFile
对象,但我敢打赌至少有一个对象是
null
。您还可以尝试
var\u dump($\u FILES)
并查找任何明显的错误或空条目——可能是服务器无法处理的太大的内容

您无法使用解决方案的原因是
Symfony\Component\HttpFoundation\File\UploadedFile
类将PHP的内部
SplFileInfo
类用作ancsetor,直到PHP出现一个程序员无法将
SplFileInfo
转换为布尔值的错误/功能(使用using
将变量转换为布尔类型进行比较)

最后,Laravel的文件上传功能依赖于Symfony组件。我相信您可以在这里找到
Symfony\Component\HttpFoundation\file\UploadedFile
实例化

#File: vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/FileBag.php
protected function convertFileInformation($file)
{
    if ($file instanceof UploadedFile) {
        return $file;
    }

    $file = $this->fixPhpFilesArray($file);
    if (is_array($file)) {
        $keys = array_keys($file);
        sort($keys);

        if ($keys == self::$fileKeys) {
            if (UPLOAD_ERR_NO_FILE == $file['error']) {
                $file = null;
            } else {
                $file = new UploadedFile($file['tmp_name'], $file['name'], $file['type'], $file['size'], $file['error']);
            }
        } else {
            $file = array_map(array($this, 'convertFileInformation'), $file);
        }
    }

    return $file;
}

因此,如果您是源代码调试人员,请从这里开始。

您可以向我们展示您的完整代码吗?好的,我已经更新了代码。如果您在
createTN($image)中执行
dd($image)
函数你得到了什么?尝试过了,但收到的类Symfony\Component\HttpFoundation\File\UploadedFile的
对象无法转换为布尔值
@Rafael Try if(!is_Object($image)){continue;}相反,谢谢你,它工作正常,没有错误。你能给我解释一下发生了什么吗?我真的不知道为什么我的代码不能工作。