web-dev-qa-db-ja.com

Laravel 4画像フォームをアップロード

ファイルをアップロードできるフォームを作成し、アプリケーションのパブリック/アップロードフォルダーに保存しようとしています。

私のフォームは:

_<form action="/image/save" method="post">
<input name="image" type="file" />
<input type="submit" value="Save"/>
</form>
_

およびコントローラー:

_public function save(){
$file = Input::file('image');
$destinationPath = 'upload/';
$filename = $file->getClientOriginalName();
Input::file('image')->move($destinationPath, $filename);
_

しかし、それを実行すると、次のエラーが発生します。非オブジェクトのメンバー関数getClientOriginalName()の呼び出し

18
Ruben

フォームで file input を有効にする必要があります。 ( Doc

Laravelでは、次を使用できます。

Form::open('image/save', array('files'=> true))

または

<form action="/images/save" method="post" enctype="multipart/form-data">

それ以外の場合、ファイル入力から受け取るのは、文字列としてのファイル名だけです。

38
Ryan Tablada

このようなフォームの生成にBladeを使用しない場合

{{ Form::open(array('url' => 'foo/bar', 'files' => true)) }}

このパラメータをフォームタグに追加するだけです

enctype="multipart/form-data"
11
Cengkaruk

また、フォームの1つで同じ問題に直面しました。問題は、オプション['files' => trueでフォームが定義されていなかったため、Laravel4フォームヘルパーにenctype="multipart/form-data"

ここに私がやったことがあります:

コントローラで次の配列を定義し、ビューに渡します、

$form_options = array (
    'url' => 'path/to/defined/route',
    'class'  => 'form-horizontal',
    'name'   => 'newUser',
    'files'  => true
);

ビューで、次のようにフォームを定義します。

{{ Form::open( $form_options ) }}

enctype="multipart/form-data"でフォームを定義します

8
Abd Ul Aziz

次のようにファイル名を取得する必要があります。

//Blade form
{{ Form::open_for_files('/image/save') }}
{{ Form::file('image') }}
{{ Form::close() }}

//get imagename
$filename = Input::file('image.name');

幸運を! :)

2
claudevandort

Laravelフォームスタイルのようなものを使用する場合、array()にフィールド_'files'=> true_を追加するだけです。

_{{ Form::open(array('url'=>'/images/save','role'=>'form','files'=> true)) }}
_

そうでない場合は、次のようなhtmlフォームタグを使用できます。

_<form action="/images/save" method="post" enctype="multipart/form-data">
_

これがお役に立てば幸いです。

1
TechnoSakil