рдЕрдиреБрднрд╡ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рдиред рдирд┐рдпрдВрддреНрд░рдХ рдкрддреЗ рдХреЗ рдЬреНрдЮрд╛рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛рдВ?

рд╕рдорд╕реНрдпрд╛ рдХрдерди



рд╕рд┐рд╕реНрдЯрдо рдХреА рдПрдХ рдкрд░рдд рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдХ рдкрддреЗ рдХреЗ рдЬреНрдЮрд╛рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЦреЛрдЬ рдХрд░рдиреЗ рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рдЙрдирдХреЗ рдкрддреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред



UPD: рд╕рдорд╕реНрдпрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдм рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдХреЗ рдкрддреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╣реАрдВ рднреА, рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ, рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ, рдХрднреА-рдХрднреА рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рднреА рд╕реЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмреЗрдХрд╛рдмреВ рд╣реЛ рдЬрд╛рддреА рд╣реИред



рдкрддреЗ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдкрд░реНрдпрд╛рдкреНрддрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдпрджрд┐ рдкрддрд╛ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдХреА рдПрдХ рдФрд░ рдкрд░рдд рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рджреГрд╢реНрдп рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВред



рдирд┐рд░реНрдгрдп



рд╕рднреА рдкрддреЗ рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рджреГрд╢реНрдп рдкрд░рдд рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд╛рдкрддрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рднрд░ рд╕рдХрддреЗ рд╣реИрдВред



рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рдо рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рд╣рд╛рдпрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдПрдХ рдПрдбреНрд░реЗрд╕ рдмрд┐рд▓реНрдбрд░ред







рдПрдбреНрд░реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб
use CUrlManager; class UrlBuilder { const PARAMETER_NAME_HASH = '#'; /** @var CUrlManager */ private $urlManager; /** @var string */ private $route; /** @var array */ private $params = array(); /** @var array */ private $required = array(); public static function className() { return get_called_class(); } /** * @param CUrlManager $urlManager */ public function __construct(CUrlManager $urlManager) { $this->urlManager = $urlManager; } /** * @return CUrlManager */ public function getUrlManager() { return $this->urlManager; } /** * @return string */ public function getRoute() { return $this->route; } /** * @param string $route * @return $this */ public function setRoute($route) { $this->route = $route; return $this; } /** * @return array */ public function getParams() { return $this->params; } /** * @param array $params * @return $this */ public function setParams($params) { $this->params = $params; return $this; } /** * @param string $name * @return mixed * @throws Exception */ public function getParam($name) { if (!array_key_exists($name, $this->params)) { throw new Exception(sprintf('This param `%s` not exists')); } return $this->params[$name]; } /** * @param string $name * @param mixed $value * @return $this */ public function setParam($name, $value) { $this->params[$name] = $value; return $this; } /** * @return string * @throws Exception */ public function getHash() { return $this->getParam(self::PARAMETER_NAME_HASH); } /** * @param string $value * @return $this */ public function setHash($value) { $this->setParam(self::PARAMETER_NAME_HASH, $value); return $this; } /** * @return array */ public function getRequired() { return $this->required; } /** * @param array $required * @return $this */ public function setRequired($required) { $this->required = $required; return $this; } /** * @throws Exception * @return string */ public function getUrl() { if ($this->hasRequiredParams()) { throw new Exception(sprintf('Required params `%s` not exists', implode(', ', $this->requiredParams()))); } return $this->getUrlManager()->createUrl($this->route, $this->params); } /** * @return array */ public function toArray() { return array( 'route' => $this->route, 'params' => $this->params, 'required' => $this->required, ); } /** * @return UrlBuilder */ public function copy() { return clone $this; } protected function hasRequiredParams() { return (boolean)$this->requiredParams(); } protected function requiredParams() { return array_diff($this->required, array_keys(array_filter($this->params))); } }
      
      









рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг



рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдкрддрд╛ рдЬреНрдЮрд╛рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛


рдореВрд▓ рд╕рд╛рд░ рдирд┐рдпрдВрддреНрд░рдХред рдПрдбреНрд░реЗрд╕ рдмрд┐рд▓реНрдбрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рдирд╛

 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('catalog', 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(), ), ));
      
      







рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, https://github.com/petrgrishin/yii-url-builder рдФрд░ https://packagist.org/packages/petrgrishin/yii-url-builder рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб



All Articles