user2431224
user2431224

Reputation: 235

How to hide Controller name & action name in yii2

Can anyone suggest me how to hide both controller & action name from url in yii2? I tried by writing rules but did not work. this is my anchor tag:

 <?php echo Html::a($model->title, ['category/view/', 'type' => $model->category->urlValue,'parameter' => $model->urlValue]); ?>

MY current url is like this :

http://localhost/project/category/view/news-and-events/dosarrest-strong-performer-in-2015-forrester-wave-for-ddos-service-providers-1

But I want it like this:

http://localhost/project/news-and-events/dosarrest-strong-performer-in-2015-forrester-wave-for-ddos-service-providers-1

Upvotes: 2

Views: 1476

Answers (2)

user2431224
user2431224

Reputation: 235

It finally worked by writing a rule in main.php file as follows :

'<type:[A-Za-z0-9-]+>/<param:[A-Za-z0-9 -_.]+>' => 'category/view',

Upvotes: 3

Konstantin
Konstantin

Reputation: 566

YOu chould create your own UrlRule. Something like:

class CustomUrlRule extends Object implements UrlRuleInterface {
    public function createUrl($manager, $route, $params)
    {
        $parts = explode('/', $r);
        if ($route === 'category/view' 
            && isset($params['type'])
            && isset($params['parameter'])
        ) {
            $url = generate some url;
            unset($params['view'], $params['parameter']);
            if (count($params)) {
                $url .= '?' . http_build_query($params);
            }

            return $url;
        }

        return false; 
    }
    public function parseRequest($manager, $request)
    {
        //parse request url and return true if it's url for category/view 
    }
}

and dont forget to add to config

config/web.php:
...
'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [
        [
        'class' => 'app\components\CustomUrlRule',
        ],
    ...
    ],
...

Upvotes: 1

Related Questions