public function generateRewrittenUrl($locale)
    {
        if ($this->isNew()) {
            throw new \RuntimeException(sprintf('Object %s must be saved before generating url', $this->getRewrittenUrlViewName()));
        }
        // Borrowed from http://stackoverflow.com/questions/2668854/sanitizing-strings-to-make-them-url-and-filename-safe

        $this->setLocale($locale);

        $generateEvent = new GenerateRewrittenUrlEvent($this, $locale);

        $this->dispatchEvent(TheliaEvents::GENERATE_REWRITTENURL, $generateEvent);

        if ($generateEvent->isRewritten()) {
            return $generateEvent->getUrl();
        }

        $title = $this->getTitle();

        if (null == $title) {
            throw new \RuntimeException('Impossible to create an url if title is null');
        }
        // Replace all weird characters with dashes
        $string = preg_replace('/[^\w\-~_\.]+/u', '-', $title);

        // Only allow one dash separator at a time (and make string lowercase)
        $cleanString = mb_strtolower(preg_replace('/--+/u', '-', $string), 'UTF-8');

        $urlFilePart = rtrim($cleanString, '.-~_') . ".html";

        try {
            $i=0;
            while (URL::getInstance()->resolve($urlFilePart)) {
                $i++;
                $urlFilePart = sprintf("%s-%d.html", $cleanString, $i);
            }
        } catch (UrlRewritingException $e) {
            $rewritingUrl = new RewritingUrl();
            $rewritingUrl->setUrl($urlFilePart)
                ->setView($this->getRewrittenUrlViewName())
                ->setViewId($this->getId())
                ->setViewLocale($locale)
                ->save()
            ;
        }

        return $urlFilePart;
    }
public function generateRewrittenUrl($locale)
    {
        if ($this->isNew()) {
            throw new \RuntimeException(sprintf('Object %s must be saved before generating url', $this->getRewrittenUrlViewName()));
        }
        // Borrowed from http://stackoverflow.com/questions/2668854/sanitizing-strings-to-make-them-url-and-filename-safe

        $this->setLocale($locale);

        $generateEvent = new GenerateRewrittenUrlEvent($this, $locale);

        $this->dispatchEvent(TheliaEvents::GENERATE_REWRITTENURL, $generateEvent);

        if ($generateEvent->isRewritten()) {
            return $generateEvent->getUrl();
        }

        $title = $this->getTitle();

        if (null == $title) {
            throw new \RuntimeException('Impossible to create an url if title is null');
        }
        // Replace all weird characters with dashes
        $string = preg_replace('/[^\w\-~_\.]+/u', '-', $title);

        // Only allow one dash separator at a time (and make string lowercase)
        $cleanString = mb_strtolower(preg_replace('/--+/u', '-', $string), 'UTF-8');

        $urlFilePart = rtrim($cleanString, '.-~_') . ".html";

        try {
            $i=0;
            while (URL::getInstance()->resolve($urlFilePart)) {
                $i++;
                $urlFilePart = sprintf("%s-%d.html", $cleanString, $i);
            }
        } catch (UrlRewritingException $e) {
            $rewritingUrl = new RewritingUrl();
            $rewritingUrl->setUrl($urlFilePart)
                ->setView($this->getRewrittenUrlViewName())
                ->setViewId($this->getId())
                ->setViewLocale($locale)
                ->save()
            ;
        }

        return $urlFilePart;
    }
public function generateRewrittenUrl ( $ locale ) { if ( $ this -> isNew ( ) ) { throw new \ RuntimeException ( sprintf ( 'Object %s must be saved before generating url' , $ this -> getRewrittenUrlViewName ( ) ) ) ; } // Borrowed from http://stackoverflow.com/questions/2668854/sanitizing-strings-to-make-them-url-and-filename-safe $ this -> setLocale ( $ locale ) ; $ generateEvent = new GenerateRewrittenUrlEvent ( $ this , $ locale ) ; $ this -> dispatchEvent ( TheliaEvents :: GENERATE_REWRITTENURL , $ generateEvent ) ; if ( $ generateEvent -> isRewritten ( ) ) { return $ generateEvent -> getUrl ( ) ; } $ title = $ this -> getTitle ( ) ; if ( null == $ title ) { throw new \ RuntimeException ( 'Impossible to create an url if title is null' ) ; } // Replace all weird characters with dashes $ string = preg_replace ( '/[^\w\-~_\.]+/u' , '-' , $ title ) ; // Only allow one dash separator at a time (and make string lowercase) $ cleanString = mb_strtolower ( preg_replace ( '/--+/u' , '-' , $ string ) , 'UTF-8' ) ; $ urlFilePart = rtrim ( $ cleanString , '.-~_' ) . ".html" ; try { $ i = 0 ; while ( URL :: getInstance ( ) -> resolve ( $ urlFilePart ) ) { $ i ++ ; $ urlFilePart = sprintf ( "%s-%d.html" , $ cleanString , $ i ) ; } } catch ( UrlRewritingException $ e ) { $ rewritingUrl = new RewritingUrl ( ) ; $ rewritingUrl -> setUrl ( $ urlFilePart ) -> setView ( $ this -> getRewrittenUrlViewName ( ) ) -> setViewId ( $ this -> getId ( ) ) -> setViewLocale ( $ locale ) -> save ( ) ; } return $ urlFilePart ; }
Generate a rewritten URL from the object title, and store it in the rewriting table

@param string $locale a valid locale (e.g. en_US)
Generate a rewritten URL from the object title and store it in the rewriting table