Advertisement
slo_nik

Untitled

Apr 5th, 2018
306
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.48 KB | None | 0 0
  1. <?php
  2.  
  3. namespace frontend\components;
  4.  
  5. use backend\models\CarModel;
  6. use yii\web\UrlRuleInterface;
  7. use yii\base\BaseObject;
  8.  
  9. use backend\models\CarMark;
  10. use backend\models\City;
  11. use backend\models\Regions;
  12.  
  13. class CarUrlRule extends BaseObject implements UrlRuleInterface
  14. {
  15.     public function createUrl($manager, $route, $params)
  16.     {
  17.        if($route === 'car/search-by-mark'){
  18.  
  19.            if(isset($params['mark-name'], $params['model-name'])){
  20.                return $params['mark-name'] . '/' . $params['model-name'];
  21.            }
  22.            elseif(isset($params['model-name'])){
  23.                return $params['model-name'];
  24.            }
  25.            elseif(isset($params['mark-name'])){
  26.                return $params['mark-name'];
  27.            }
  28.        }
  29.        elseif($route === 'car/search-by-city'){
  30.            if(isset($params['region-name'], $params['city-name'])){
  31.                return $params['region-name'] . '/' . $params['city-name'];
  32.            }
  33.        }
  34.        elseif($route === 'car/search-by-region'){
  35.            if(isset($params['region-name'])){
  36.                return $params['region-name'];
  37.            }
  38.        }
  39.        elseif($route === 'car/search-by-region-city-mark'){
  40.            if(isset($params['region-name'], $params['city-name'], $params['mark-name'])){
  41.                return $params['region-name'] . '/' . $params['city-name'] . '/' . $params['mark-name'];
  42.            }
  43.        }
  44.        elseif($route === 'car/search-by-region-city-mark-model'){
  45.            if(isset($params['region-name'], $params['city-name'], $params['mark-name'], $params['model-name'])){
  46.                return $params['region-name'] . '/' . $params['city-name'] . '/' . $params['mark-name'] . '/' . $params['model-name'];
  47.            }
  48.        }
  49.        elseif($route === 'car/show'){
  50.            if(isset($params['region'], $params['city'], $params['mark'], $params['model'], $params['id'])){
  51.                return $params['region'] . '/' . $params['city'] . '/' . $params['mark'] . '/' . $params['model'] . '/' . $params['id'] . '/';
  52.            }
  53.            elseif(isset($params['id'])){
  54.                return 'car/show/' . $params['id'] . '/';
  55.            }
  56.        }
  57.        return false;
  58.     }
  59.  
  60.     public function parseRequest($manager, $request)
  61.     {
  62.         $pathInfo = $request->getPathInfo();
  63.         $action = null;
  64.         $params = [];
  65.         if(preg_match('#^(\w+)/(\w+)/(\d+)$#', $pathInfo, $matches)){
  66.             return ['car/show', ['id' => $matches[3]]];
  67.         }
  68.         elseif(preg_match('#^([\w\-]+)(/([\w\-]+))?(/([\w\-]+))?(/([\w\-]+))?$#', $pathInfo, $matches)){
  69.             if(CarMark::find()->where(['name' => str_replace('-', ' ', $matches[1])])->exists()){
  70.                 $action = 'search-by-mark';
  71.                 $params = ['mark-name' => $matches[1]];
  72.             }
  73.             elseif(CarModel::find()->where(['name' => $matches[1]])->exists()){
  74.                 $action = 'search-by-mark';
  75.                 $params = ['mark-name' => $matches[1]];
  76.             }
  77.             elseif(isset($matches[7]) && CarModel::find()->where(['name' => $matches[7]])->exists()){
  78.                 $action = 'search-by-region-city-mark-model';
  79.                 $params = ['region-name' => $matches[1], 'city-name' => $matches[3], 'mark-name' => $matches[5], 'model-name' => $matches[7]];
  80.             }
  81.             elseif(isset($matches[5]) && CarMark::find()->where(['name' => $matches[5]])->exists()){
  82.                 $action = 'search-by-region-city-mark';
  83.                 $params = ['region-name' => $matches[1], 'city-name' => $matches[3], 'mark-name' => $matches['5']];
  84.             }
  85.             elseif(isset($matches[3]) && City::find()->where(['like', 'city_name', str_replace('-', ' ', $matches[3])])->exists()){
  86.                 $action = 'search-by-city';
  87.                 $params = array_filter(['region-name' => $matches[1], 'city-name' => $matches[3]]);
  88.             }
  89.             elseif(Regions::find()->where(['like', 'region_name', str_replace('-', ' ', $matches[1])])->exists()){
  90.                 $action = 'search-by-region';
  91.                 $params = ['region-name' => $matches[1]];
  92.             }
  93.             return ['car/' . $action, $params];
  94.         }
  95.         elseif(preg_match('#^([\w\-]+)(/([\w\-]+))?(/([\w\-]+))?(/([\w\-]+))?(/(\d+)/)?$#', $pathInfo, $matches)){
  96.             return ['car/show', ['region' => $matches[1], 'city' => $matches[3], 'mark' => $matches[5], 'model' => $matches[7], 'id' => $matches[9]]];
  97.         }
  98.  
  99.         return false;
  100.     }
  101.  
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement