public function setupObjectRouteRequirements($route, Object $object, $withPrefix = false)
{
$path = $route instanceof Route ? $route->getPath() : $route;
if (false !== strpos($path, '{pk}')) {
$pks = [];
foreach ($object->getFields() as $field) {
if ($field->isPrimaryKey()) {
$oriPk = $pk = ($withPrefix ? lcfirst($object->getId()) . '_' : '') . $field->getId();
$i = 0;
while (false !== strpos($path, '{' . $pk . '}')) {
$pk = $oriPk . ++$i;
}
$pks[] = '{' . $pk . '}';
if ($route instanceof Route) {
$pkColumns = $field->getFieldType()->getColumns();
if ($pkColumns) {
//we support for now only one column per pk
$column = $pkColumns[0];
$route->setRequirement($pk, $column->getRequiredRegex());
}
}
}
}
$path = str_replace('{pk}', implode('/', $pks), $path);
if ($route instanceof Route) {
$requirements = $route->getRequirements();
unset($requirements['pk']);
$route->setRequirements($requirements);
$route->setPath($path);
}
}
return $path;
}