natral
natral

Reputation: 1098

Syntax for defining rules for routes in yii2

I am using Yii2's pretty urls and want to play around with the rules defined in my UrlManager but not finding any documentation as to how I can define variables in the 'pattern' => 'route' rule set. Found some examples like

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'enableStrictParsing' => false,
            'rules' => [
                "home" => "site/index",
                "login" => "site/login",
                "sign-up" => "site/sign-up",
                '<controller:[\w-]+>/<id:\d+>' => '<controller>/view',
            ],
        ],

But what does the :[\w-]+ or the :\d+ stand for?

What if I wanted, for example, to define a pattern to point to my action which needs two parameters

class MyController extends Controller{
    ...
    public function actionMyAction($param1, $param2){
        ...
    }
}

now I want my web users to type in the url bar www.mysite.com/my-controller/my-action/X-Y where X is the value of $param1 and Y is the value of $param2 and using - as a parameter separator.

Thanks.

Upvotes: 0

Views: 947

Answers (1)

Maddelynne P
Maddelynne P

Reputation: 624

[\w-]+ and \d+ are regular expressions, the first indicating any letter or the dash character, repeated one or more times, the section indicating numbers only, repeated one or more times.

In the rule expression, you use <variable name:regex> to put a placeholder for your route that will resolve to variables passed to your controller action.

The rule should look like this if both $param1 and $param2 are numbers.

'my-controller/my-action/<param1:\d+>-<param2:\d+>' => 'my-controller/my-action',

Swap \d for \w if you need letters.

Upvotes: 2

Related Questions