CakePHP Имя пользователя URL с использованием Regex? - PullRequest
5 голосов
/ 24 апреля 2011

Я нашел здесь комментарий: http://bakery.cakephp.org/articles/PHPdiddy/2006/10/06/custom-urls-from-the-site-root

Сказано:

Просто измените последнюю строку.
Router :: connect ('/ ',массив ('controller' => 'members', 'action' => 'show'));
до
Router :: connect ('(?! admin | items | images) (.
*) ', array (' controller '=>' members ',' action '=>' show '));

Некоторые люди смогли заставить это работать ... Это не такВыглядело мне совершенно правильно, поэтому я попробовал следующее, но все равно не повезло:

Router::connect('(?!/admin|/items|/images)(/.*)',
array('controller' => 'members','action' => 'show'));

В любом случае, цель состоит в том, чтобы создать URL-адрес типа http://domainname/username, отображаемый для пользователей.уникальный идентификатор.Он работает с / *, но я не использую этот метод.Идеи?

Обновление до решения: Я использовал выбранный ответ ниже и добавил следующее.Это может быть полезно для кого-то еще.

$misc = array(*your misc webroot, admin route items here...*);
$notList = array_merge(Configure::listObjects('plugin'),Configure::listObjects('controller'));
$notListLowerCase = array();
foreach ($notList as $key=>$item):
    $notListLowerCase[] = strtolower(preg_replace("/(.)([A-Z])/","\\1_\\2",$item));
endforeach;
$notList = array_merge($notList,$misc,$notListLowerCase);
$notList = implode('|', $notList);

Router::connect('/:username', 
        array(
            'controller'=>'users', 
            'action'=>'view'
        ),   
        array(
            'username' => '\b(?:(?!'.$notList.')\w)+\b'
        )
    );

Ответы [ 2 ]

4 голосов
/ 24 апреля 2011

Вот, пожалуйста. Вы должны захватить его как параметр и затем ссылаться на него в регулярном выражении. Имя пользователя будет доступно в $ this-> params ['username'] в действии контроллера.

Router::connect('/:username', 
    array(
        'controller'=>'members', 
        'action'=>'show'
    ),   
    array(
        'username' => '\b(?:(?!admin|items|images)\w)+\b'
    )
);
0 голосов
/ 14 июля 2016
$misc = array(*your misc webroot, admin route items here...*);
    $notList = array_merge(App::objects('plugin'),str_replace('Controller','',App::objects('controller')));
    $notListLowerCase = array();
    foreach ($notList as $key=>$item):
        $notListLowerCase[] = strtolower(preg_replace("/(.)([A-Z])/","\\1_\\2",$item));
    endforeach;
    $notList = array_merge($notList,$misc,$notListLowerCase);
    $notList = implode('|', $notList);
    Router::connect('/:username', array('controller' => 'members', 'action' => 'show'),array('pass'=>array('username'),'username'=>'\b(?:(?!'.$notList.')\w)+\b'));
...