petrgrishin / yii-url-builder
URL 构建器
1.0.0
2014-06-14 20:03 UTC
Requires
- php: >=5.3.0
- yiisoft/yii: *
Requires (Dev)
This package is not auto-updated.
Last update: 2024-09-24 02:01:29 UTC
README
URL 构建器
安装
在项目的 composer.json 中添加依赖
{ "require": { "petrgrishin/yii-url-builder": "~1.0" } }
问题描述
需要在系统的一层中确定对控制器地址的了解。这将允许快速且无痛苦地进行控制器及其地址的搜索和重构。
实现地址构建参数的充分性检查,如果这种情况发生在其他层,例如在视图或客户端脚本中。
解决方案
所有控制器地址应在控制器本身中定义。如有必要,可以在视图层或客户端脚本层填充缺失的参数。为了方便工作,需要定义一个辅助工具 - 地址构建器。
使用示例
在控制器中确定地址了解
基本抽象控制器。实现创建地址构建器对象的方法
class BaseController extends \CController { public function createUrlBuilder($route, $params = array()) { $urlBuilder = new UrlBuilder($this->getUrlManager()); $urlBuilder ->setRoute($route) ->setParams($params); return $urlBuilder; } public function getUrlManager() { $urlManager = $this->getApp()->getUrlManager(); return $urlManager; } public function getApp() { return \Yii::app(); } }
具体控制器。使用地址构建器
class SiteController extends BaseController { public function actionIndex() { return $this->render('index', array( 'urls' => array( 'catalog' => $this->createUrlBuilder('site/catalog') ->getUrl(), // передана готовая строка адреса ?r=site/catalog ), )); } public function actionCatalog() { return $this->render('about', array( 'products' => Product::model()->findAll(), 'urls' => array( 'product' => $this->createUrlBuilder('site/product') ->setRequired(array('id')), // передан объект построителя с необходимыми знаниями, // требуемые параметры заполняются в представлении ), )); } public function actionProduct($id) { return $this->render('product'); } }
输出商品目录视图
/** @var UrlBuilder $productUrlBuilder */ $productUrlBuilder = $this->getParam('urls.product'); foreach ($this->getParam('products') as $product) { $productUrl = $productUrlBuilder ->copy() ->setParam('id', $product->id) ->getUrl(); print($productUrl); // строка адреса ?r=site/product&id=1 } // или передать параметры построителя адреса в клиентский скрипт $this->setJsParams(array( 'urls' => array( 'product' => $productUrlBuilder->toArray(), ), ));