Alexander Makarov
11 years ago
1 changed files with 113 additions and 0 deletions
@ -1,3 +1,116 @@
|
||||
URL Management |
||||
============== |
||||
|
||||
The concept of URL management in Yii fairly simple. The idea is that application uses internal routes and parameters |
||||
everywhere. Framework takes care of translating routes into URLs and back according to URL manager configuration. |
||||
This approach allows you to adjust URLs in a single config file without touching application code. |
||||
|
||||
Internal route |
||||
-------------- |
||||
|
||||
Internal routes and parameters are what you're dealing with when implementing an application usuing Yii. |
||||
|
||||
Each controller and its action has a corresponding internal route such as `site/index`. Here `site` is referred to as |
||||
controller ID while `test` is referred to as action ID. If controller belongs to a module, internal route is prefixed |
||||
with the module ID such as `blog/post/index` for a blog module. |
||||
|
||||
Creating URLs |
||||
------------- |
||||
|
||||
As was already mentioned, the most important rule is to always use URL manager to create URLs. Url manages is an |
||||
application component with `urlManager` id that is accessible both from web and console applications via |
||||
`\Yii::$app->urlManager` and has two following URL creation methods availabe: |
||||
|
||||
- createUrl($route, $params = []) |
||||
- createAbsoluteUrl($route, $params = []) |
||||
|
||||
First one creates URL relative to the application root while the second one creates URL prefixed with protocol and |
||||
hostname. The former is suitable for internal application URLs while the latter is used when you need to create rules |
||||
for outside the website. For example, when sending emails or generating RSS feed. |
||||
|
||||
Some examples: |
||||
|
||||
```php |
||||
echo \Yii::$app->urlManager->createUrl('site/page', ['id' => 'about']); |
||||
echo \Yii::$app->urlManager->createAbsoluteUrl('blog/post/index'); |
||||
``` |
||||
|
||||
Inside web application controller you can use its own `createUrl` shortcut method in the following forms: |
||||
|
||||
```php |
||||
echo $this->createUrl(''); // currently active route |
||||
echo $this->createUrl('view', ['id' => 'contact']); // same controller, different action |
||||
echo $this->createUrl('post/index'); // same module, different controller and action |
||||
echo $this->createUrl('/site/index'); // absolute route no matter which controller we're in |
||||
``` |
||||
|
||||
> **Tip**: In order to generate URL with a hashtag, for example `/index.php?r=site/page&id=100#title`, you need to |
||||
specify parameter named `#` using `$this->createUrl('post/read', ['id' => 100, '#' => 'title'])`. |
||||
|
||||
Customizing URLs |
||||
---------------- |
||||
|
||||
By default Yii uses a query string format URLs such as `/index.php?r=news/view&id=100`. In order to make URLs |
||||
human-friendly you need to configure `urlManager` component like the following: |
||||
|
||||
```php |
||||
<?php |
||||
return [ |
||||
// ... |
||||
'components' => [ |
||||
'urlManager' => [ |
||||
'enablePrettyUrl' => true, |
||||
'showScriptName' => false, |
||||
], |
||||
], |
||||
]; |
||||
``` |
||||
|
||||
Note that |
||||
|
||||
### Named parameters |
||||
|
||||
### Handling subdomains |
||||
|
||||
### Faking URL Suffix |
||||
|
||||
```php |
||||
<?php |
||||
return [ |
||||
// ... |
||||
'components' => [ |
||||
'urlManager' => [ |
||||
'suffix' => '.html', |
||||
], |
||||
], |
||||
]; |
||||
``` |
||||
|
||||
### Handling REST |
||||
|
||||
|
||||
URL parsing |
||||
----------- |
||||
|
||||
Complimentary to creating URLs Yii is handling transforming custom URLs back into internal route and parameters. |
||||
|
||||
### Strict URL parsing |
||||
|
||||
By default if there's no custom rule for URL and URL matches default format such as `/site/page` Yii tries to run a |
||||
corresponding controller's action. This beahvior coule be disabled so if there's no custom rule match, a 404 not found |
||||
error will be produced immediately. |
||||
|
||||
```php |
||||
<?php |
||||
return [ |
||||
// ... |
||||
'components' => [ |
||||
'urlManager' => [ |
||||
'enableStrictParsing' => true, |
||||
], |
||||
], |
||||
]; |
||||
``` |
||||
|
||||
Creating your own rule classes |
||||
------------------------------ |
||||
|
Loading…
Reference in new issue