Код: Выделить всё
'<mark-name:[\w]+>' => 'car/search-by-mark',
Код: Выделить всё
'<region-name:[\w\-]+>' => 'car/search-by-region',
З.Ы. rename(shnir) -> andku83
Код: Выделить всё
'<mark-name:[\w]+>' => 'car/search-by-mark',
Код: Выделить всё
'<region-name:[\w\-]+>' => 'car/search-by-region',
Код: Выделить всё
'm_<mark-name:[\w\-]+>/<model-name:[\w\-]+>' => 'car/search-by-mark',
'm_<mark-name:[\w]+>' => 'car/search-by-mark',
'r_<region-name:[\w\-]+>/<city-name:[\w\-]+>' => 'car/search-by-city',
'r_<region-name:[\w\-]+>' => 'car/search-by-region',
Но остальные правила работают, переход идёт на те действия, которые мне нужны.на самом деле сейчас у вас присутствует еще и вторая пара перекрытия
эти префиксы должны быть и в ссылках?для того чтобы урлМанагер мог определить на какой контроллер передавать управление, нужно это указать каким-то явным маркером или префиксом:
Просмотрел в очередной раз видео. Попытался создать свой класс для правил.
Код: Выделить всё
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/show'){
if(isset($params['region'], $params['city'], $params['mark'], $params['model'], $params['id'])){
return $params['region'] . '/' . $params['city'] . '/' . $params['mark'] . '/' . $params['model'] . '/' . $params['id'];
}
}
return false;
}
public function parseRequest($manager, $request)
{
$pathInfo = $request->getPathInfo();
if(preg_match('#^([\w\-]+)(/([\w\-]+))?$#', $pathInfo, $matches)){
return ['car/search-by-mark', array_filter(['mark-name' => $matches[1], 'model-name' => $matches[3]])];
}
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]]];
}
else{
echo 'error url';
}
return false;
}
}
Код: Выделить всё
if(preg_match('#^([\w\-]+)(/([\w\-]+))?$#', $pathInfo, $matches)){
if(Car::find()->where(['mark-name' => $matches['1']])){
$action = 'search-by-mark';
$params = array_filter(['mark-name' => $matches[1], 'model-name' => $matches[3]]);
}
elseif(City::find()->where(['city-name' => $matches[1]])){
$action = 'search-by-city';
$params = array_filter(['region-name' => $matches[1], 'city-name' => $matches[3]]);
}
return ['car/' . $action, $params];
}
Код: Выделить всё
if (Car::find()->where(['mark-name' => $matches['1']])->exists()) {
...
}
Понятно, буду искать)))ElisDN писал(а): ↑2018.03.25, 09:53 Да, искать в базе:
Код: Выделить всё
if (Car::find()->where(['mark-name' => $matches['1']])->exists()) { ... }