0
我有一個ZF2應用程序與幾個模塊及其路線。一切都很好。但是我想定製URL的創建方式,而不必重寫所有的視圖。ZF2修改URL格式
讓考慮以下路線:
'routes' => array(
'moduleName' => array(
'type' => 'segment',
'options' => array(
'route' => '/moduleName/[:title]-[:id][/:action]
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'moduleName\Controller\moduleName',
'action' => 'index',
),
),
),
我穿上「標題」沒有任何限制,因爲它可以包含歐洲特殊字符和/或空格的字符串。 的網址http://domain/moduleName/J'ustAn éxample-28/create
工作正常,但我想這是正確的格式:http://domain/moduleName/j-ustan-example-28/create
有沒有辦法在我的配置文件中很好地? Module.php的?甚至「更高」?
編輯 我試圖建立一個新的URL助手(基於這個問題Extending Zend\View\Helper\Url in Zend Framework 2):
namespace Application\View\Helper;
use Zend\View\Helper\Url as ZendUrl;
class Url extends ZendUrl {
public function __invoke($name = null, array $params = array(), $options = array(), $reuseMatchedParams = false) {
foreach($params as $param => $value) {
$params[$param] = $this->cleanString($value);
}
$link = parent::__invoke($name, $params, $options, $reuseMatchedParams);
return $link;
}
public function cleanString($string) {
$string = str_replace(array('[\', \']'), '', $string);
$string = preg_replace('/\[.*\]/U', '', $string);
$string = preg_replace('/&(amp;)?#?[a-z0-9]+;/i', '-', $string);
$string = htmlentities($string, ENT_COMPAT, 'utf-8');
$string = preg_replace('/&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);/i', '\\1', $string);
$string = preg_replace(array('/[^a-z0-9]/i', '/[-]+/') , '-', $string);
return strtolower(trim($string, '-'));
}
}
但我不能使它發揮作用。 我心中已經把這個\應用\ Module.php:
public function getViewHelperConfig()
{
return array(
'factories' => array(
'Application\View\Helper\Url' => function ($sm) {
$serviceLocator = $sm->getServiceLocator();
$view_helper = new \Application\View\Helper\Url();
$router = \Zend\Console\Console::isConsole() ? 'HttpRouter' : 'Router';
$view_helper->setRouter($serviceLocator->get($router));
$match = $serviceLocator->get('application')
->getMvcEvent()
->getRouteMatch();
if ($match instanceof RouteMatch) {
$view_helper->setRouteMatch($match);
}
return $view_helper;
}
),
);
}
但它不工作,不顯示任何錯誤...
任何想法?
你要接受的網址特別茶然後修改要過濾的參數,或將特殊字符url重定向到轉換後的url? – GeeH
我想過濾params.I試圖建立一個新的URL助手,但無法設法使其工作... – Bibear