I'm making a small form with the option to upload files with laravel and I ran into a problem at the time of submitting. The following problem occurs: When sending the form with upload it sends and saves normally in the bank, but without upload file it returns the error Call to a member function extension() on null
. Can anyone help me?
Routes:
Route::post('/gravar', 'ManifestationController@store');
Controller:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\Manifestation;
use App\Models\State;
use App\Http\Requests\ManifestationFormRequest;
use RealRashid\SweetAlert\Facades\Alert;
class ManifestationController extends Controller
{
private $manifestation;
public function __construct(Manifestation $manifestation)
{
$this->manifestation = $manifestation;
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$category = DB::table('categories')->pluck('id');
$response = ['Email', 'Telefone', 'Fax', 'Não Informado'];
$states = DB::table('states')->pluck('letter');
return view('site.index', [
'category' => $category,
'response' => $response,
'states' => $states,
]);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(ManifestationFormRequest $request)
{
//Nome do arquivo a ser armazenado
$name = date('dmYHis');
//armazena form em dataForm
$dataForm = $request->except('_token');
//Insere Formulário no Banco
$insert = $this->manifestation->insert($dataForm);
if($request->has('upload'))
{
//Pega extensão do arquivo original
$extension = $request->upload->extension();
//Armazena arquivo em Storage/app/uploads e renomeia.
$upload = $request->upload->storeAs('uploads', $name.'.'.$extension);
}
Alert::success('Enviado...', 'Obrigado pela sua contribuição');
return redirect()->route('index');
}
}
Form:
<!-- #formulario -->
<form method="post" action="/gravar" enctype="multipart/form-data">
{{csrf_field()}}
<div class="form-row">
<div class="form-group col-md-3">
<label for="categorias">Escolha o tipo</label>
<select id="categorias" class="form-control form-control-sm" name="FK_cat_id">
@foreach ($category as $categories)
<option value="{{$categories}}">{{$categories}}</option>
@endforeach
</select>
</div>
<div class="form-group col-md-3">
<label for="response">Receber resposta via:</label>
<select class="form-control form-control-sm" name="response">
@foreach ($response as $resposta)
<option value="{{$resposta}}">{{$resposta}}</option>
@endforeach
</select>
</div>
<div class="col-md-6 text-right">
<input type="checkbox" name="anonimo" id="anonimo" onchange="setaCampos(this.checked)" />
Deseja anonimato?
</div>
</div>
@if (count($errors) > 0)
<div id="ERROR_COPY" style="display: none;" class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{$error}}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-row">
<div class="form-group col-md-6">
<label for="name">Nome</label>
<input type="text" id="name" style="text-transform:uppercase" name="name" class="form-control" placeholder="Nome completo" value="{{ old('name') }}">
</div>
<div class="form-group col-md-6">
<label for="email">Email</label>
<input type="email" name="email" class="form-control" id="email" placeholder="[email protected]" value="{{ old('email') }}">
</div>
</div>
<div id="hideInf" >
<div class="form-row">
<div class="form-group col-md-6">
<label for="rg">RG</label>
<input type="text" name="rg" class="form-control" id="rg" value="{{ old('rg') }}">
</div>
<div class="form-group col-md-6">
<label for="cpf">CPF</label>
<input type="text" name="cpf" class="form-control" id="cpf" value="{{ old('cpf') }}">
</div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="address">Endereço</label>
<input type="text" name="address" class="form-control" id="address" placeholder="Av, Rua, QD..." value="{{ old('address') }}">
</div>
<div class="form-group col-md-3">
<label for="phone">Telefone</label>
<input type="tel" name="phone" class="form-control" id="phone_with_ddd" placeholder="(xx) ____-____" value="{{ old('phone') }}">
</div>
<div class="form-group col-md-3">
<label for="fax">Fax</label>
<input type="tel" name="fax" class="form-control" id="fax_with_ddd" placeholder="(xx) ____-____" value="{{ old('fax') }}">
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="city">Cidade</label>
<input type="text" name="city" class="form-control" id="city" placeholder="Cidade em que reside" value="{{ old('city') }}">
</div>
<div class="form-group col-md-4">
<label for="state">Estado</label>
<select id="state" name="state" class="form-control" value="{{ old('state') }}">
@foreach ($states as $state)
<option selected>{{$state}}</option>
@endforeach
</select>
</div>
<div class="form-group col-md-2">
<label for="cep">CEP</label>
<input type="text" name="cep" class="form-control" id="cep" value="{{ old('cep') }}">
</div>
</div>
<div class="form-row col-md-6 col-xs-6">
<div class="form-group">
<label for="file">Enviar Arquivo</label>
<input type="file" name="upload" class="form-control-file" value="{{ old('upload') }}">
</div>
</div>
<div class="form-group">
<label for="manifestation">Escreva Sua Mensagem</label>
<textarea name="manifestation" class="form-control" id="manifestation" rows="12">{{ old('manifestation') }}</textarea>
</div>
<button type="submit" class="btn btn-success">Enviar</button>
<button type="reset" class="btn btn-danger">Limpar</button>
</form>
error line:
76 $ extension = $ request-> file ('upload') -> extension ();