Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace frontend\components;
- use backend\models\CarModel;
- use yii\web\UrlRuleInterface;
- use yii\base\BaseObject;
- use backend\models\CarMark;
- use backend\models\City;
- use backend\models\Regions;
- class CarUrlRule extends BaseObject implements UrlRuleInterface
- {
- public function createUrl($manager, $route, $params)
- {
- if($route === 'car/search-by-mark'){
- if(isset($params['mark-name'], $params['model-name'])){
- return $params['mark-name'] . '/' . $params['model-name'];
- }
- elseif(isset($params['model-name'])){
- return $params['model-name'];
- }
- elseif(isset($params['mark-name'])){
- return $params['mark-name'];
- }
- }
- elseif($route === 'car/search-by-city'){
- if(isset($params['region-name'], $params['city-name'])){
- return $params['region-name'] . '/' . $params['city-name'];
- }
- }
- elseif($route === 'car/search-by-region'){
- if(isset($params['region-name'])){
- return $params['region-name'];
- }
- }
- elseif($route === 'car/search-by-region-city-mark'){
- if(isset($params['region-name'], $params['city-name'], $params['mark-name'])){
- return $params['region-name'] . '/' . $params['city-name'] . '/' . $params['mark-name'];
- }
- }
- elseif($route === 'car/search-by-region-city-mark-model'){
- if(isset($params['region-name'], $params['city-name'], $params['mark-name'], $params['model-name'])){
- return $params['region-name'] . '/' . $params['city-name'] . '/' . $params['mark-name'] . '/' . $params['model-name'];
- }
- }
- elseif($route === 'car/show'){
- if(isset($params['region'], $params['city'], $params['mark'], $params['model'], $params['id'])){
- return $params['region'] . '/' . $params['city'] . '/' . $params['mark'] . '/' . $params['model'] . '/' . $params['id'] . '/';
- }
- elseif(isset($params['id'])){
- return 'car/show/' . $params['id'] . '/';
- }
- }
- return false;
- }
- public function parseRequest($manager, $request)
- {
- $pathInfo = $request->getPathInfo();
- $action = null;
- $params = [];
- if(preg_match('#^(\w+)/(\w+)/(\d+)$#', $pathInfo, $matches)){
- return ['car/show', ['id' => $matches[3]]];
- }
- elseif(preg_match('#^([\w\-]+)(/([\w\-]+))?(/([\w\-]+))?(/([\w\-]+))?$#', $pathInfo, $matches)){
- if(CarMark::find()->where(['name' => str_replace('-', ' ', $matches[1])])->exists()){
- $action = 'search-by-mark';
- $params = ['mark-name' => $matches[1]];
- }
- elseif(CarModel::find()->where(['name' => $matches[1]])->exists()){
- $action = 'search-by-mark';
- $params = ['mark-name' => $matches[1]];
- }
- elseif(isset($matches[7]) && CarModel::find()->where(['name' => $matches[7]])->exists()){
- $action = 'search-by-region-city-mark-model';
- $params = ['region-name' => $matches[1], 'city-name' => $matches[3], 'mark-name' => $matches[5], 'model-name' => $matches[7]];
- }
- elseif(isset($matches[5]) && CarMark::find()->where(['name' => $matches[5]])->exists()){
- $action = 'search-by-region-city-mark';
- $params = ['region-name' => $matches[1], 'city-name' => $matches[3], 'mark-name' => $matches['5']];
- }
- elseif(isset($matches[3]) && City::find()->where(['like', 'city_name', str_replace('-', ' ', $matches[3])])->exists()){
- $action = 'search-by-city';
- $params = array_filter(['region-name' => $matches[1], 'city-name' => $matches[3]]);
- }
- elseif(Regions::find()->where(['like', 'region_name', str_replace('-', ' ', $matches[1])])->exists()){
- $action = 'search-by-region';
- $params = ['region-name' => $matches[1]];
- }
- return ['car/' . $action, $params];
- }
- elseif(preg_match('#^([\w\-]+)(/([\w\-]+))?(/([\w\-]+))?(/([\w\-]+))?(/(\d+)/)?$#', $pathInfo, $matches)){
- return ['car/show', ['region' => $matches[1], 'city' => $matches[3], 'mark' => $matches[5], 'model' => $matches[7], 'id' => $matches[9]]];
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement