Hi everyone im stuck and would love your help.
I have a ClipController.php and in the clip it contains relationships to Video.php and Image.php models.
i am able to save the form data just find when i hit cClipController.php store function but here is the catch.
my clip->video form needs to pass through a fileuploadtrait.php but i am unable to get it to work. I am sure its a simple fix but im not seeing it. ill include my code for you to review.
File location paths
use App\Clip;
use App\Video;
use App\Http\Controllers\Traits\FileUploadTrait;
use App\Http\Controllers\ClipController;
Clip controller store funtion
public function store(StoreClipsRequest $request)
{
if (! Gate::allows('clip_create')) {
return abort(401);
}
// This works on the controllers for each individual form. but not on the combined form here. example: on VideoController store this line works fine.
// $request = $this->saveFiles($request);
$clip = Clip::create($request->all());
foreach ($request->input('videos', []) as $data) {
// tried these but they dont work
// $data = $this->saveFiles($request->all());
// $data = $this->saveFiles($data['videos']['1']['video']);
// $data = $this->saveFiles(Input::get('video')->get());
// $request = $this->saveFiles($request->videos()->video);
$clip->videos()->create($data);
}
foreach ($request->input('brands', []) as $data) {
$clip->brands()->create($data);
}
return redirect()->route('admin.clips.index');
}
Form line in my clip/create.blade.php
This part is for the clip => video store functionality
<tr data-index="{{ $index }}">
<td>{!! Form::hidden('videos['.$index.'][video]', old('videos['.$index.'][video]')) !!}{!! Form::file('videos['.$index.'][video]', ['class' => 'form-control']) !!}</td>
<td>{!! Form::text('videos['.$index.'][name]', old('videos['.$index.'][name]', isset($field) ? $field->name: ''), ['class' => 'form-control']) !!}</td>
<td>{!! Form::text('videos['.$index.'][extention]', old('videos['.$index.'][extention]', isset($field) ? $field->extention: ''), ['class' => 'form-control']) !!}</td>
<td>{!! Form::text('videos['.$index.'][ad_duration]', old('videos['.$index.'][ad_duration]', isset($field) ? $field->ad_duration: ''), ['class' => 'form-control']) !!}</td>
<td>
<a href="#" class="remove btn btn-xs btn-danger">remove</a>
</td>
</tr>
this form saves just fine into the video table just fine but its not using the FileUploadTrait.php file it needs.
FileUploadTrait.php
namespace App\Http\Controllers\Traits;
use Illuminate\Http\Request;
use Intervention\Image\Facades\Image;
use File;
use FFMpeg;
use FFMpeg\FFProbe;
use Illuminate\Support\Facades\Log;
use App\Helpers\Normalize;
use App\Helpers\FFMPEG_helpers;
use App\Clip;
use App\Video;
trait FileUploadTrait
{
/**
* File upload trait used in controllers to upload files
*/
public function saveFiles(Request $request)
{
if (! file_exists(public_path().'/uploads')) { File::makeDirectory(public_path().'/uploads',0777, true);}
$uploadPath = env('UPLOAD_PATH', 'uploads');
$finalRequest = $request;
foreach ($request->all() as $key => $value) {
if ($request->hasFile($key)) {
$filename = $request->file($key)->getClientOriginalName();
$extension = $request->file($key)->getClientOriginalExtension();
if(preg_match('/^.*\.(mp4|mov|mpg|mpeg|wmv|mkv)$/i', $filename)){
//Log::info('passed valication: '.$filename);
$filename = $request->file($key)->getClientOriginalName();
$basename = substr($filename, 0, strrpos($filename, "."));
$basename = Normalize::titleCase($basename);
$ad_duration = FFMPEG_helpers::getDuration($request->file($key));
$filename = str_slug($basename) . '.' . $extension;
$request->file($key)->move($clipPath, $filename);
$finalRequest = new Request(array_merge($finalRequest->all(), [$key => $filename, 'video' => $request->video, 'extention' => $extension, 'name'=> $basename, 'ad_duration'=>$ad_duration]));
$file_w_path = $clipPath . "/" . $filename;
}
}
}
}
return $finalRequest;
}
}