Форма загрузки фотографий 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()
для не-объекта
Ответы
Ответ 1
У вас должен быть включен входной файл в форме. (Doc)
В Laravel вы можете использовать:
Form::open('image/save', array('files'=> true))
или
<form action="/images/save" method="post" enctype="multipart/form-data">
В противном случае все, что вы получаете от ввода файла, - это имя файла в виде строки.
Ответ 2
Если вы не используете Blade для создания вашей формы, как это
{{ Form::open(array('url' => 'foo/bar', 'files' => true)) }}
Просто добавьте этот параметр в свой тег формы
enctype="multipart/form-data"
Ответ 3
Я также столкнулся с одной и той же проблемой с одной из моих форм, проблема заключалась в том, что форма не была определена с помощью опции '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"
Ответ 4
Вы должны получить имя файла следующим образом:
//Blade form
{{ Form::open_for_files('/image/save') }}
{{ Form::file('image') }}
{{ Form::close() }}
//get imagename
$filename = Input::file('image.name');
Удачи!:)
Ответ 5
Вы можете просто добавить поле 'files'=> true
в свой array()
, если вы используете стиль формы Laravel, что-то вроде
{{ Form::open(array('url'=>'/images/save','role'=>'form','files'=> true)) }}
иначе вы можете использовать тег формы html как-то вроде
<form action="/images/save" method="post" enctype="multipart/form-data">
Надеюсь, это поможет вам.