I am trying to access json in a nested array but it is not working yet.
I am developing in laravel an have this
public function rave(Request $request){
$vars = [
'id' => Request::get('id'),
'txref' => Request::get('txRef'),
'flwref' => Request::get('flwRef'),
'created_at' => Request::get('createdAt'),
'amount' => Request::get('amount'),
'status' => Request::get('status'),
'name' => Request::get('fullName'),
'email' => Request::get('customer'),
];
I am able to get and display all in view but name and email which comes back in the response as
"customer":{
"id":15672,
"phone":"7667866 ",
"fullName":"john doe ",
"customertoken":null,
"email":"kely#gmail.com",
"createdAt":"2019-06-09T08:28:56.000Z",
"updatedAt":"2019-06-09T08:28:56.000Z",
"deletedAt":null,
"AccountId":33519
},
How do I access the data under customer because this
'name' => Request::get('fullName'),
'email' => Request::get('customer'),
doesn't seem to work like the others
You use Request $request as function parameter,
and check output of
echo $request->input('customer.fullName');
echo $request->input('customer.email');
Related
I have implemented the php-opencloud/openstack library, and I use it to retrieve objects (object_store/v1).
I use the retrieve function that allows me to retrieve the content of an object,
but how to retrieve a part of an object using "range" defined in the request header with this library?
It seems possible, see the Api.php extract :
public function getObject(): array
{
return [
'method' => 'GET',
'path' => '{containerName}/{+name}',
'params' => [
'containerName' => $this->params->containerName(),
'name' => $this->params->objectName(),
'range' => $this->params->range(),
'ifMatch' => $this->params->ifMatch(),
'ifNoneMatch' => $this->params->ifNoneMatch(),
'ifModifiedSince' => $this->params->ifModifiedSince(),
'ifUnmodifiedSince' => $this->params->ifUnmodifiedSince(),
],
];
}
I'm trying to set up my own request which I could send to a method for testing purposes, but I can't seem to find how to format it.
Right now I'm trying to pull array out of the request
$data = $request->request->get('itemData');
It should look like this once I get it:
[
'basic' => [
'type' => 1
'country => 1
],
'information' => [
'wadding' => 1
]
]
I have written it like this:
$request->request->set("itemData[basic][type]", 2);
$request->request->set("itemData[information][wadding]", 0);
But I get null since the key is not itemData but for example itemData[basic][type]
How do I format it in the set command so the request parameters are sent in array form?
Figured it out
$request->request->set("itemData",
[
'basic' => ['type' => 2, 'country' => 1],
'information' => ['wadding' => 0]
]
);
I making laravel API where i can store a new data where the value in body raw json. but when i try to send request using post, i got nothing but the status is 200 OK. when i chek my mysql there is no data inputed.
So, what should i do?
mysql data
Laravel Controller, and API,
// function in controller
use App\Models\ChartAge;
class ChartController extends Controller
{
public function saveChart(Request $request)
{
$data = $request->validate([
'entity' => 'required|string|max:10',
'code' => 'required|string|max:10',
'year' => 'required|int|max:10',
'under_age_15' => 'required|string|max:50',
'age_15_64' => 'required|string|max:50',
'age_65_over' => 'required|string|max:50',
]);
$values = ChartAge::create($request);
return response()->json(
[
'status' => true,
'message' => "the videos has been favorites",
'data' => $values,
],
201
);
}
}
//in api.php
Route::post("charts", [ChartController::class, 'saveChart']);
and here is when i tried to send request using postman.
because there is no error, i don't know what's wrong??
First double check your ChartAge model, does it have $fillable or not?
and Edit your code:
From
$values = ChartAge::create($request);
To:
$values = ChartAge::create($request->all());
Hope this will be useful.
With validation:
$data = \Validator::make($request->all(),[
'entity' => 'required|string|max:10',
'code' => 'required|string|max:10',
'year' => 'required|int|max:10',
'under_age_15' => 'required|string|max:50',
'age_15_64' => 'required|string|max:50',
'age_65_over' => 'required|string|max:50',
]);
if($data-> fails()){
return back()->withErrors($data)->withInput();
}
$values = ChartAge::create($request->all());
Do you set fillable fields in your 'ChartAge' model?
protected $fillable = ['entity','code','year'...];
Do you try to test code with disabling validation?
Please try to put dd($request) in the first row of the controller code.
Method create expects a plain PHP array, not a Request object.
I am trying to write a phpunit test so I can test that I'm getting the correct assertion, this test i currently have which is passing and works as intended.
/**
#test
*/
$filmInfo = $this->postRequest();
$this->assertFilm($this->requestData, $filmInfo['id']);
$film = Film::findOrFail($filmInfo['id']);
$this->assertEquals('LOTR', $filmInfo['name']);
$this->assertEquals('Film about a ring', $filmInfo['description']);
$this->assertEquals('Fantasy', $filmInfo['genre']['main']);
$this->assertEquals('Adventure', $filmInfo['genre']['sub']);
}
This is the request data array it is referring to:
private function requestData(): array
{
return [
'name' => 'LOTR',
'description' => 'Film about a ring',
'main' => 'Fantasy',
'sub' => 'Adventure',
];
}
This test works fine and it passing but I want to test it within one assertion like so:
$this->assertEquals([
'name' => 'LOTR',
'description' => 'Film about a ring',
'genre' => [
'main' => 'Fantasy',
'sub' => 'Adventure'
]
,
], $filmInfo);
But I keep getting an error that the 2 arrays I'm asserting are not matching, do you guys have an idea on what could be causing this?
Just like what the PHPUnit said, your array aren't matching. Your array should match with all values in $filmInfo array.
From your code, we can guessing that you aren't comparing the id. Maybe you can try this code:
$this->assertEquals(array_merge($filmInfo, [
'name' => 'LOTR',
'description' => 'Film about a ring',
'genre' => [
'main' => 'Fantasy',
'sub' => 'Adventure'
],
]), $filmInfo);
I have the following array
$array['projects'] = [
'name1' => [
'task' => [
'tags' => ['value1', 'value2'],
'email' => 'email2',
'description' => 'mpla'
],
'email' => 'email1',
'tags' => ['value1', 'value3'],
'title' => 'mpla'
]
];
Is there anyway I could use the Hash class of CakePHP 3 or maybe another class of CakePHP framework to achieve the following result:
$array['projects'] = [
'name1' => [
'email' => 'email2',
'tags' => ['value1', 'value2'],
'title' => 'mpla'
'desciption' => 'mpla'
]
];
If you also know anyother package that it can handle arrays and get my job done it will do.
Not sure that this can be easily achieved using Cake's Hash utility. You can easily extract the array items indexed by task using combine(), but not sure how you would then go about extracting the title values and combining those with the other array elements using Hash:-
Hash::combine($array, 'projects.{s}', 'projects.{s}.task');
Perhaps the simplest solution is to use a foreach loop like this:-
$data = [];
foreach ($array['projects'] as $value) {
$data['projects'] = $value['task'] + ['title' => $value['title']];
}