Wallogit.com
2017 © Pedro Peláez
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()
);
}
}