2012-12-20 3 views
0

Я хотел бы создать контроллер, который обрабатывает загрузку файлов в определенные пользователем папки. В настоящее время у меня есть приложение, которое позволяет пользователям загружать файл, который отправляет данные сообщения контроллеру.Создание контроллера, который обрабатывает загрузки файлов

Что я хотел бы, чтобы контроллер сделал, это загрузить загруженный файл и поместить его в папку, например. /public/{username}/files

Но я не слишком уверен, как подойти к нему с помощью symfony.

+0

Взгляните на поваренную книгу «Как обрабатывать загрузки файлов с помощью доктрины»: http://symfony.com/doc/current/cookbook/doctrine/file_uploads.html – dbrumann

+0

ах нет, я не был, не думал о Доктрине, по-прежнему очень новой для этого ха-ха. Спасибо за это. – ChaoticLoki

ответ

1

Как прокомментировал Mahok, Документы Symfony2 полезны здесь.

Я бы follow them с добавленными дополнениями. При сохранении документа, передавать имя пользователя:

if ($form->isValid()) { 
    $em = $this->getDoctrine()->getManager(); 
    //get the user and pass the username to the upload method 
    $user = $this->get('security.context')->getToken()->getUser(); 
    $document->upload($user->getUsername()); 

    $em->persist($document); 
    $em->flush(); 

    $this->redirect(...); 
} 

При загрузке файла, используйте имя пользователя:

public function upload($username) 
{ 
    if (null === $this->file) { 
     return; 
    } 
    //use the username for the route 
    $this->file->move(
     "/public/$username/files/", 
     $this->file->getClientOriginalName() 
    ); 

    // set the path property to the filename where you've saved the file 
    $this->path = $this->file->getClientOriginalName(); 

    // clean up the file property as you won't need it anymore 
    $this->file = null; 
} 

Сохранение это таким образом вы не будете на самом деле нужно использовать дополнительные методы сущностей, как " getAbsolutePath»и т.д.

Обратите внимание, что вы, возможно, придется slugify имя пользователя, если вы принимаете пробелы и т.д.

Edit: Вам нужно будет настроить отношение oneToMany для пользователей к файлам, чтобы вы могли найти файл позже.

+0

А я не знал, что могу использовать Доктрину, чтобы сделать ее проще, спасибо! – ChaoticLoki

0

Это может помочь вам ---

$upload_dir = "your upload directory/{username}";   
if (!is_dir($upload_dir)) { 
    @mkdir($upload_dir, "755", true); 
} 
move_uploaded_file($source,$destination); 
Смежные вопросы