Integration between dropzone and laravel5.
Este pacote para Laravel5 serve para persistir temporáriamente arquivos submetidos através da biblioteca DropzoneJS., (*1)
Ao realizar o upload de um arquivo, este será armazenado em uma área temporária., (*2)
Caso ocorra um reload na página, o componente irá repopular os arquivos previamente carregados, previnindo que seu usuário tenha que inserir os arquivos novamente., (*3)
Estes casos de reload de página podem ocorrer por falha na validação de algum campo após submeter o formulário, ou por qualquer outro erro no lado so servidor., (*4)
Existe a restrição de que um formulário contenha apenas um componente., (*5)
composer require jakjr/dropzone, (*6)
config/app.php, (*7)
'providers' => [ ... Jakjr\Dropzone\DropzoneServiceProvider::class, ] 'aliases' => [ ... 'Dropzone' => Jakjr\Dropzone\DropzoneFacade::class, ]
Publicando os assets:, (*8)
$php artisan vendor:publish --provider="Jakjr\Dropzone\DropzoneServiceProvider"
Route::post('dropzone', function(){ app('dropzone')->upload(); }); Route::delete('dropzone', function(){ app('dropzone')->delete(); });
São os endpoints que receberão os arquivos carregados pelo DropzoneJS., (*9)
O método upload irá armazenar o arquivo em um diretrio temporário do sistema, e em um diretório com o nome do ID da sessão do usuário., (*10)
@section('css') <link rel="stylesheet" href='/vendor/dropzone/css/dropzone.min.css'> @endsection @section('js') <script src="/vendor/dropzone/js/dropzone.min.js"></script> <script> $('.dropzone').lightDropzone({!! Dropzone::getConfig() !!}); </script> @endsection
Os atributos data-* são utilizados para configurar o componente DropzoneJS., (*11)
Seus nomes são auto-explicativos., (*12)
O attributo data-url deve é a URL do endpoint definido no routes.php, (*13)
Registro o middleware do pacote:, (*14)
app\Http\Kernel.php:, (*15)
protected $routeMiddleware = [ ... 'dropzone' => \Jakjr\Dropzone\Middleware\Dropzone::class, ];
Este middleware é responsável por injetar no request de um submit os arquivos previamente carregados., (*16)
Aplique o middleware no método do controller que utilizará o carregamento de arquivos:, (*17)
class FormController extends Controller { public function __construct() { $this->middleware('dropzone', ['only'=>['postForm']]); } ... }
Utilize o Request para obter uma instância UploadedFile dos aquivos préviamente carregados:, (*18)
public function store(Request $request) { ... //Use the methods from Laravel $request->file('files.0')->move .... ... }
O arquivo permanecerá disponível no componente enquanto não foi movido para seu destino permanente., (*19)
Exemplo para mover todos os arquivos:, (*20)
if (!empty($files = $request->files->get('files'))) { /** @var UploadedFile $file */ foreach($files as $file) { $file->move( storage_path(), $file->getClientOriginalName() ); } }