urlManager - uniqcle/Yii2 GitHub Wiki
Страница на сайта | Адрес страницы | Обработчик запроса | Маршрут (route) |
---|---|---|---|
Главная | / | Метод actionIndex() в классе SiteController | site/index |
О компании | /about | Метод actionAbout() в классе SiteController | site/about |
Все новости | /news | Метод actionList() в классе NewsController | news/list |
Роль urlManager - это найти подходящий маршрут согласно правилам и передать работу в соответствующий обработчик. /frontend/config/main.php
# Прописываем маршруты
...
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'/' => 'site/index',
'about' => 'site/about'
'news' => 'news/list'
],
],
...
Чтобы настроить urlManager, необходимо:
-
Перенаправить все запросы на Front Controller (файл index.php) Apache Config
-
Настроить компонент urlManager в конфигурации приложения
/var/www/[site_name]/frontend/config/main.php
...
'rules' => [
'novosti' => 'news/list'
],
...
В файле /frontend/config/main.php
вносим правки 'novosti/<id:\d+>' => 'news/view'
id будет поступать в Controller
'rules' => [
'novosti' => 'news/index',
'novosti/<id:\d+>' => 'news/view'
],
В NewsController
namespace frontend\controllers;
use yii\web\Controller;
use frontend\models\News;
class NewsController extends Controller
{
public function actionIndex(){
$newsItems = News::getNews();
return $this->render('index', [
'newsItems' => $newsItems,
]);
}
public function actionView($id){
$item = News::getNewsItem($id);
return $this->render('view', [
'item' => $item,
]);
}
}
В модели News
namespace frontend\models;
use Yii;
class News
{
public static function getNews(){
$sql = "SELECT * FROM news ";
return Yii::$app->db->createCommand($sql)->queryAll();
}
public static function getNewsItem($id){
$sql = "SELECT * FROM news WHERE id=".$id;
return Yii::$app->db->createCommand($sql)->queryOne();
}
}
В виде index
# Обычный способ
foreach($newsItems as $item):
<a href = "/novosti/<?=$item["id"]; ?>"> <?=$item['title']; ?> </a>
$item['content'];
endforeach;
# Получаем адрес страницы по обработчику
echo Yii::$app->urlManager->createUrl(['news/index']);
# Получаем адрес страницы по обработчику с параметром
echo Yii::$app->urlManager->createUrl(['news/view', 'id' => $item['id']]);
<a href = "<?php echo Yii::$app->urlManager->createUrl(['news/view', 'id' => $item['id']]); ?> ">
<?=$item['title']; ?>
</a>
В виде view
<h2><?=$item["title"]; ?></h2>
<p><?=$item["content"]; ?></p>
<a href = "<?php echo Yii::$app->urlManager->createUrl(['news/index']) ?>">Назад</a>
или с использованием helpers
use yii\helpers\Url;
<a href = "<?php echo Url::to(['news/index']) ?>">Назад</a>