parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Обработка URI

Mizter Egoist 17.11.2015 11:12

Ранее уже спрашивал про Front Controller
Теперь знаний побольше, делаю обработку $request:uri
Ниже привожу несколько способов которые попробовал и все они работают не так как положено, либо выдают Страница не найдена, либо на любой URI true

В этом примере выдает на любой адрес true, допустим /foo/bar/none которого не существует
@path[params]
$path[^params.url.split[/;lh]]
$s[^get.getSections[]]
$_s[^s.hash[url]]
$h[^get.getHeadings[]]
$_h[^h.hash[url]]
$e[^get.getEntries[]]
$_e[^e.hash[link]]
$g[^get.getGoods[]]
$_g[^g.hash[link]]
^switch(true){
	^case(def $_s.[$path.1] && def $_h.[$path.2] && def $_e.[$path.3]){
		$response[true]
	}
	^case(def $_s.[$path.1] && def $_h.[$path.2] && def $_g.[$path.3]){
		$response[true]
	}
	^case(def $_s.[$path.1] && def $_e.[$path.2]){
		$response[true]
	}
	^case(def $_s.[$path.1] && def $_g.[$path.2]){
		$response[true]
	}
	^case(def $_s.[$path.1] && def $_h.[$path.2]){
		$response[true]
	}
	^case(def $_s.[$path.1]){
		$response[true]
	}
	^case($request:uri eq '/'){
		$response[true]
	}
	^case[DEFAULT]{
		$response[false]
	}
}
В этой попытке у меня везде false, точнее Страница не найдена
@path[params]
$path[^params.url.split[/;lh]]
$s[^get.getSections[]]
$_s[^s.hash[url]]
$h[^get.getHeadings[]]
$_h[^h.hash[url]]
$e[^get.getEntries[]]
$_e[^e.hash[link]]
$g[^get.getGoods[]]
$_g[^g.hash[link]]
^if($_s.[$path.1]){
	$response[true]
	^if($_h.[$path.2]){
		$response[true]
		^if($_e.[$path.3]){
			$response[true]
		}{
			^if($_g.[$path.3]){
				$response[true]
			}{
				$response[false]
			}
		}
	}{
		^if($_e.[$path.2]){
			$response[true]
			^if($_g.[$path.2]){
				$response[true]
			}{
				$response[false]
			}
		}{
			$response[false]
		}
	}
}{
	$response[false]
}
В этой попытке дальше /foo не идет, пишет false, точнее страница не найдена
@path[params]
^if(def $params.url){
	$section[^get.getSections[
		$.url[$params.url]
	]]
	^if(def $section){$response[true]}{$response[false]}
	^if(def $section && def $params.uri){
		$heading[^get.getHeadings[
			$.section_id($section.id)
			$.url[$params.uri]
		]]
		^if(def $section && def $heading){$response[true]}{$response[false]}
		^if(def $heading && def $params.pid){
			$entry[^get.getEntries[
				$.SID($section.id)
				$.HID($heading.id)
				$.link[$params.pid]
			]]
			^if(def $section && def $heading && def $entry){
				$response[true]
			}{
				$goody[^get.getGoods[
					$.SID($section.id)
					$.HID($heading.id)
					$.link[$params.pid]
				]]
				^if(def $section && def $heading && def $goody){$response[true]}{$response[false]}
			}
		}{
			$entry[^get.getEntries[
				$.SID($section.id)
				$.link[$params.uri]
			]]
			^if(def $section && def $entry){
				$response[true]
			}{
				$goody[^get.getGoods[
					$.SID($section.id)
					$.link[$params.uri]
				]]
				^if(def $section && def $goody){$response[true]}{$response[false]}
			}
		}
	}
}
Это вообще нерабочий кошмар
@path_rules[link]
$parts[^link.uri.split[/;lh]]
^if($parts){
	$s[^get.getSections[
		$.url[$parts.1]
	]]
	$h[^get.getHeadings[
		$.section_id($s.id)
		$.url[$parts.2]
	]]
	$e[^get.getEntries[
		$.SID($s.id)
		$.HID($h.id)
		$.link[^if($parts.3){${parts.3}}($parts.2){${parts.2}}{}]
	]]
	$g[^get.getGoods[
		$.SID($s.id)
		$.HID($h.id)
		$.link[^if($parts.3){${parts.3}}($parts.2){${parts.2}}{}]
	]]
	^if(def $s && def $h && def $e){
		$response[true]
	}(def $s && def $h && def $g){
		$response[true]
	}(def $s && def $h){
		$response[true]
	}(def $s){
		$response[true]
	}{$response[false]}
}
Вот обработка самой страницы
@page_rules[]
^path[
	$.url[$form:url]
	$.uri[$form:uri]
	$.pid[$form:pid]
]
^switch(true){
	^case($get.auth.gID == 1 && $request:uri eq "/admin${address.1}"){
		^admin.page[]
	}
	^case($get.auth.gID != 1 && $request:uri eq "/admin${address.1}"){
		^error_404.page[]
	}
	^case[DEFAULT]{
		^if($request:uri eq '/'){
			^deafult.page[]
		}($response eq 'true'){
			^deafult.page[]
		}{
			^error_404.page[]
		}
	}
}