5

laravelでフォームを処理するときに、ファイルがアップロードされている場合とされていない場合があるフォームにファイルアップロードフィールド(attachment1)があります。

ページを処理しようとすると、次の行で例外が生成されます。

Input::upload('attachment1',path('storage').'attachments/'.$name);

例外のテキストは次のとおりです。

Message:
Call to a member function move() on a non-object

ファイルがあるかどうか事前に確認する必要があるよう'attachment1'で、関数Input::has_file('attachment1')はファイルがあるかどうかを教えてくれるはずな'attachment1'のですが、空のフォームを送信してもtrueを返します。

また、ドキュメントを読むと、Input::upload存在しないファイルをアップロードしようとすると false を返すようになっているようですが、代わりにこの例外が発生するのはなぜですか?どうすれば修正できますか?

4

4 に答える 4

4

添付ファイルをアップロードする前に、いくつかのチェックを行う必要があります。これは私のために働く:

$file = Input::file('attachment1');
 if (is_array($file) && isset($file['error']) && $file['error'] == 0) {
 Input::upload('attachment1',path('storage').'attachments/'.$name);
}
于 2012-12-29T10:31:29.060 に答える
3

ファイルがアップロードされているかどうかに関係なく、 PHP$_FILESにはキーが含まれています。tmp_nameではなく、空の文字列として送信されますNULLhas_file()期待しているようですNULL

public static function has_file($key)
{
    return ! is_null(static::file("{$key}.tmp_name"));
}

コントローラーでそれを回避するには、次のことを試してください。

if (array_get(Input::file('attachment1'), 'tmp_name'))
{
    // file uploaded
}
于 2012-06-21T20:46:51.947 に答える
0

これを行う最も簡単な「Laravel」の方法は、入力名を確認することです。

if (Input::has('attachment1'))
{
    // Do stuff
}
于 2013-12-07T19:25:18.773 に答える
0

Laravelがuplaodとファイルをどのように扱うかを理解しようとしている間に、いくつかのポイントを学びました。彼らがあなたに役立つことを願っています

初め:

「メッセージ: 非オブジェクトでのメンバー関数 move() の呼び出し」

フォルダーに書き込み権限がない可能性があるため、この例外がスローされる可能性があります。

2番:

次のような検証ルールで入力を検証できます

'attachment' => 'image|mime:jpg,gif,png|max:(キロバイト)

三番:

プロジェクトで拡張されたブートストラップを使用しています。彼らは「名前」属性を使用しないことを好みます。と

<input type="file" />

このリンクからチェックアウトできます。 オプション セクションまで下にスクロールし、名前の説明欄をお読みください。したがって、基本的に理解したのですが、実際には投稿の一部であるため、入力が空であってもLaravelはtrueを返します

4 番目: コードを共有し、推奨事項を受け入れたいと思います。それらがすべて役立つことを願っています...

try
    {

        $comp = new Company();
        $comp->name = newCompanyForm::get('name');
        $comp->save();
        if($comp)
        {
                if(newCompanyForm::has('logo'))
                {

                    $logo = Input::upload('logo', path('public').'company_logos');
                    if($logo)
                    {

                        $comp->logo = URL::base().'lms/company_logos/'.$logo->getfileName();
                        $comp->save();
                    }
                    else
                        throw new \Exception("Logo yüklenirken hata oluştu. Şirket logosuz kayıt edildi.");
                }
                Session::flash('status_success', 'Şirket eklendi.');
                newCompanyForm::forget_input();
                return Redirect::back();
        }
        else
            throw new Exception("Şirket eklenirken hata oluştu. Şirket eklenmedi.");

    }
    catch(\Exception $e)
    {
        $errors->add('lms', $e->getMessage());
        return Redirect::back()->with_errors($errors);
    }
于 2012-12-20T03:48:08.717 に答える