ファイルをアップロードできるフォームを作成し、アプリケーションのパブリック/アップロードフォルダーに保存しようとしています。
私のフォームは:
_<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()
の呼び出し
フォームで file input を有効にする必要があります。 ( Doc )
Laravelでは、次を使用できます。
Form::open('image/save', array('files'=> true))
または
<form action="/images/save" method="post" enctype="multipart/form-data">
それ以外の場合、ファイル入力から受け取るのは、文字列としてのファイル名だけです。
このようなフォームの生成にBladeを使用しない場合
{{ Form::open(array('url' => 'foo/bar', 'files' => true)) }}
このパラメータをフォームタグに追加するだけです
enctype="multipart/form-data"
また、フォームの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"
でフォームを定義します
次のようにファイル名を取得する必要があります。
//Blade form
{{ Form::open_for_files('/image/save') }}
{{ Form::file('image') }}
{{ Form::close() }}
//get imagename
$filename = Input::file('image.name');
幸運を! :)
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">
_
これがお役に立てば幸いです。