Common\Doctrine\Repository\MetaRepository::generateURL PHP Метод

generateURL() публичный Метод

Generate an url, using the predefined callback.
public generateURL ( string $url, string $class, string $method, array $parameters = [] ) : string
$url string The base-url to start from.
$class string The Fully Qualified Class Name or service name
$method string The method that needs to be called
$parameters array The parameters for the callback
Результат string
    public function generateURL($url, $class, $method, array $parameters = [])
    {
        // check if the class is a service
        if (Model::getContainer()->has($class)) {
            $class = Model::getContainer()->get($class);
        }
        // validate (check if the function exists)
        if (!is_callable([$class, $method])) {
            throw new Exception('The callback-method doesn\'t exist.');
        }
        // when using ->getValue() in SpoonFormText fields the function is using htmlentities(),
        // so we must decode it again first!
        $url = SpoonFilter::htmlentitiesDecode($url);
        $actualParameters = [];
        // build parameters for use in the callback
        $actualParameters[] = Uri::getUrl($url);
        // add parameters set by user
        if (!empty($parameters)) {
            foreach ($parameters as $parameter) {
                $actualParameters[] = $parameter;
            }
        }
        // get the real url
        return call_user_func_array([$class, $method], $actualParameters);
    }

Usage Example

Пример #1
0
 /**
  * @param string $baseFieldName
  *
  * @return Closure
  */
 private function getSubmitEventFunction($baseFieldName)
 {
     return function (FormEvent $event) use($baseFieldName) {
         $metaForm = $event->getForm();
         $metaData = $event->getData();
         $parentForm = $metaForm->getParent();
         if ($parentForm === null) {
             throw new LogicException('The MetaType is not a stand alone type, it needs to be used in a parent form');
         }
         if (!$parentForm->has($baseFieldName)) {
             throw new InvalidArgumentException('The base_field_name does not exist in the parent form');
         }
         $defaultValue = $parentForm->get($baseFieldName)->getData();
         $overwritableFields = $this->getOverwritableFields();
         array_walk($overwritableFields, function ($fieldName) use($metaForm, $defaultValue, &$metaData) {
             if ($metaForm->get($fieldName . 'Overwrite')->getData()) {
                 // we are overwriting it so we don't need to set the fallback
                 return;
             }
             $metaData[$fieldName] = $defaultValue;
         });
         $generatedUrl = $this->metaRepository->generateURL(SpoonFilter::htmlspecialcharsDecode($metaData['url']), $metaForm->getConfig()->getOption('generate_url_callback_class'), $metaForm->getConfig()->getOption('generate_url_callback_method'), $metaForm->getConfig()->getOption('generate_url_callback_parameters'));
         if ($generatedUrl !== $metaData['url'] && $metaData['urlOverwrite']) {
             $metaForm->get('url')->addError(new FormError($this->translator->trans('err.URLAlreadyExists')));
             $event->setData($metaData);
             return;
         }
         $metaData['url'] = $generatedUrl;
         $event->setData($metaData);
     };
 }
MetaRepository