Подтвердить что ты не робот

Форма загрузки фотографий 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() для не-объекта

4b9b3361

Ответ 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">

Надеюсь, это поможет вам.