The example given in the readme:
sf_image:
class: sfImageTransformRoute
url: /thumbnails/:type/:format/:path/:slug-:id.:sf_format
param: { module: sfImageTransformator, action: index, attribute: file }
...
options:
image_source: Doctrine
Within the sfImageSourceDoctrine, the path parameter seems to be ignored. If you look at the translated filepath, it seems the filepath is extracted from the class name instead:
sfConfig::get('sf_upload_dir').'/'.strtolower(get_class($obj)).'/'.$obj->$attribute
So it will work by accident if you use the path /uploads/modelname. The Propel source has a different implementation but still broken; the buildURIfromParameters seems to ignore the path in both.
Apologies for the crude format of this fix, but i found this to work for me (in sfImageSourceDoctrine). It also works in the case the developer just uses the root /uploads directory:
public static function buildURIfromParameters(array $parameters)
{
...
$path = $parameters['attribute'];
if (isset($parameters['path']))
{
$path = $parameters['path'] . '/' . $path;
}
return sprintf('sfImageSource://%s/%s#%s', $parameters['type'], $path, $parameters['id']);
}
protected function translatePathToFilename($path)
{
...
$filepath = sfConfig::get('sf_upload_dir');
$path = ltrim($url['path'], '/');
$slashPos = strrpos($path, '/');
$attribute = null;
if ($slashPos === false)
{
$attribute = $path;
}
else
{
$attribute = substr($path, $slashPos + 1);
$filepath .= '/' . substr($path, 0, $slashPos);
}
$filepath .= '/' . $obj->$attribute;
return $filepath;
}
The example given in the readme:
sf_image: class: sfImageTransformRoute url: /thumbnails/:type/:format/:path/:slug-:id.:sf_format param: { module: sfImageTransformator, action: index, attribute: file } ... options: image_source: DoctrineWithin the sfImageSourceDoctrine, the path parameter seems to be ignored. If you look at the translated filepath, it seems the filepath is extracted from the class name instead:
sfConfig::get('sf_upload_dir').'/'.strtolower(get_class($obj)).'/'.$obj->$attributeSo it will work by accident if you use the path /uploads/modelname. The Propel source has a different implementation but still broken; the buildURIfromParameters seems to ignore the path in both.
Apologies for the crude format of this fix, but i found this to work for me (in sfImageSourceDoctrine). It also works in the case the developer just uses the root /uploads directory:
public static function buildURIfromParameters(array $parameters) { ... $path = $parameters['attribute']; if (isset($parameters['path'])) { $path = $parameters['path'] . '/' . $path; } return sprintf('sfImageSource://%s/%s#%s', $parameters['type'], $path, $parameters['id']); } protected function translatePathToFilename($path) { ... $filepath = sfConfig::get('sf_upload_dir'); $path = ltrim($url['path'], '/'); $slashPos = strrpos($path, '/'); $attribute = null; if ($slashPos === false) { $attribute = $path; } else { $attribute = substr($path, $slashPos + 1); $filepath .= '/' . substr($path, 0, $slashPos); } $filepath .= '/' . $obj->$attribute; return $filepath; }