A strange one here which has me stumped.
I have a form request with a custom validator. Upon successful validation I add some items to the request as follows:
public function __construct(ValidationFactory $validationFactory) {
$validationFactory->extend('spatial_reference', function ($attribute, $value, $params, $validator) {
$spatialReferences = calculateSpatialReferences($value);\\ returns an array with the various spatial references
if( $spatialReferences == false ){
return false;
}
$this->request->add($spatialReferences); //Works if request comes from html form
$this->request->remove('spatial_reference');//Works if request comes from html form
return true;
},
'Spatial reference is not in a valid format.');
}
public function store(SomeRequest $request)
{
dd($request->all()); \\ contains the spatial references but not if the request was sent via json
}
However here is the strange part. When post is sent from a web form the following lines work fine and request->all() shows the attributes are indeed added to the request when accessed from within the store method in the controller.
$this->request->add($spatialReferences); //Works if request comes from html form
$this->request->remove('spatial_reference');//Works if request comes from html form
But!! if the request came in via JSON then the above does not work but the following does:
request()->request->add($spatialReferences); //Works if request comes from html form
request()->request->remove('spatial_reference');//Works if request comes from html form
And to make matters worse the same is true vice versa. request()->request->add() works for JSON requests but fails if the request comes from a form.
If anyone has any ideas on why this is happening I would appreciate it. Its so strange, they are both CustomRequest classes and both are created but the request->add method is performing differently based on whether the request originated in a form or json.
Any ideas?
Thanks.
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire