Closed
Description
Trying to get a resource which ID value is zero, kinda similar to an issue found at the former cloudcreativity/laravel-json-api throws the LogicException No JSON API resource id name set on route. Turns out that on funtion modelOrResourceId in Route.php an assingnmet within the if stament is performed and it throws the exception because a logic value false is assumed, instead of the actual 0.
Here's referenced code (at line 102):
/**
* @inheritDoc
*/
public function modelOrResourceId()
{
if (!$name = $this->resourceIdName()) {
throw new LogicException('No JSON API resource id name set on route.');
}
if ($modelOrResourceId = $this->route->parameter($name)) {
return $modelOrResourceId;
}
throw new LogicException('No JSON API resource id set on route.');
}
And this is the workaround the I've implemented in order to prevent the exception being thrown:
/**
* @inheritDoc
*/
public function modelOrResourceId()
{
if (!$name = $this->resourceIdName()) {
throw new LogicException('No JSON API resource id name set on route.');
}
if (!is_null($this->route->parameter($name)) && $this->route->parameter($name)!='') {
return $this->route->parameter($name);
}
throw new LogicException('No JSON API resource id set on route.');
}
I'm not sure if this is the best solution but, considering that it's plausible to have a resource ID = zero, it solves my issues without affecting any other values.
Hope it helps!