@SNAPEY - Alright, after trying to get the dropzone and form to submit I decided to try the multistep approach.
Can you see why the storeStep2() is being immediately called after finishing the first page button? It renders this error:
Call to a member function addMedia() on null
This means, it's skipping the createStep2(). However, if I just go to page bidbird.test/jobs/create-Step2 the dropzone displays??
<?php
namespace App\Http\Controllers;
use App\Job;
use App\Events\JobPosted;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use League\CommonMark\CommonMarkConverter;
use File;
class JobsController extends Controller
{
protected $job;
public function __construct()
{
$this->middleware('auth')->except(['index', 'show']);
}
public function index()
{
$jobs = Job::oldest()
->filter(request(['month', 'year']))
->get();
$archives = Job::selectRaw('year(created_at) year, monthname(created_at) month, count(*) bidded')
->groupBy('year', 'month')
->orderByRaw('min(created_at) desc')
->get()
->toArray();
return view('jobs.index', [
'jobs' => Job::paginate(3)
],
compact('jobs'));
}
public function show(Job $job)
{
// $this->authorize('update', $job);
// \Gate::define('update-job', 'App\Policies\JobPolicy@update');
// $job = Job::findOrFail(request('job'));
return view('jobs.show', compact('job'));
}
/**
* Show the step 1 Form for creating a new product.
*
* @return \Illuminate\Http\Response
*/
public function createStep1(Request $request)
{
$job = $request->session()->get('job');
return view('jobs.create-Step1', compact('job', $job));
}
/**
* Post Request to store step1 info in session
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function storeStep1(Request $request)
{
// dd(request('title'));
$this->validate(request(), [
'jobtitle' => 'required|unique:jobs|min:3|max:255',
'body' => 'required',
'city' => 'required',
'state' => 'required',
'zipcode' => 'required|integer|min:6',
'for' => 'required',
'job' => 'required',
'sub-job' => 'required',
'deadline' => 'required|integer|between:1,10'
]);
// Calculate deadline; add weeks to current time of job posting
$week = $request->input('deadline');
$deadline = Carbon::now()
->addWeeks($week)
->toDateTimeString();
// Create a new job using request data
Job::create([
'jobtitle' => request('jobtitle'),
'body' => request('body'),
'city' => request('city'),
'state' => request('state'),
'zipcode' => request('zipcode'),
'for' => request('for'),
'job' => request('job'),
'sub-job' => request('sub-job'),
'deadline' => $deadline,
'user_id' => auth()->id()
]);
// event(new JobPosted($job));
// Redirect to
return redirect('/jobs/create-step2');
}
/**
* Post Request to store step1 info in session
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function createStep2(Request $request)
{
$job = $request->session()->get('job');
return view('jobs.create-Step2', compact('job', $job));
}
/**
* Post Request to store step2 info in session
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function storeStep2(Request $request)
{
$job = $request->session()->get('job');
$job
->addMedia($request->file('file'))
->toMediaLibrary()
->toMediaCollection();
return redirect()->back()->with('status', 'Media files added to job!');;
}
/**
* Store job
*
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$job = $request->session()->get('job');
$job->save();
return redirect('/jobs');
}
public function edit(Job $job)
{
// $job = Job::find($id);
// abort_if($job->user_id !== auth()->id(), 403);
return view('jobs.edit', compact('job'));
}
public function update(Job $job)
{
// dd('hello');
// $this->authorize('update', $job);
$job->update(request(['jobtitle', 'body']));
return redirect('/jobs');
}
public function destroy(Job $job)
{
// dd('delete ' . $id);
$job->delete();
return redirect('/jobs');
}
}
here are the named routes:
Route::get('/jobs/create-Step1', 'JobsController@createStep1');
Route::post('/jobs/create-Step1', 'JobsController@storeStep1');
Route::get('/jobs/create-Step2', 'JobsController@createStep2');
Route::post('/jobs/create-Step2', 'JobsController@storeStep2');
Route::resource('jobs', 'JobsController');
I tried commenting out the ::resource to see if there were double calls, or some issue but it did not seem to have an effect. Almost there!