2013-09-01 1 views
0

저는 얼마 동안 CodeIgniter를 사용했지만 주로 국제화, 쿠키 및 세션 제어와 같은 편의 기능을 위해 사용했습니다. 나는 또한 내 견해를 나의 논리와 분리하는 것을 좋아한다. 필자는 사람들이 PHP 프레임 워크를 사용하는 핵심 이유 중 하나 인 데이터베이스 액세스와 같은 핵심 사항에 대해 알았지 만 지금은 필요로하는 사이트를 구축하지 않았습니다.CodeIgniter 또는 모든 PHP 프레임 워크를 사용하여 상대 경로에 대한 웹 브라우저 동작

내가 대답을 찾을 수없는 것들 중 하나는 상대 경로에 관한 것입니다. 내 태그에는 항상 완전한 경로를 넣었습니다. 예 그러나

<a href="<?php echo '/' .$pageController . '/' . $pageMethod . '/' . $pageLanguage . '/home'; ?>">Home</a> 

를 들어, 난 그냥

<a href="home">Home</a> 

넣으면 내가 동일한 컨트롤러, 방법 및 언어를 사용하고 그것을 실제로 한 일 것이라는 점을 발견했습니다. 나는 심지어 나의 프랑스 섹션에서 시험해 보았다. 언어를 바꾸려면 분명히 전체 경로를 제공해야합니다. 이것이 CI와는 관련이 없다고 생각하지만, 브라우저의 행동입니다.

정확히 어떤 동작입니까? 브라우저가 상대 경로를 볼 때 현재 경로를보고 가장 가까운/문자로 이동 한 후 모든 경로를 지우고 상대 경로를 추가합니까? 나는 이것을 매번 의지 할 수 있습니까?

답변

1

예,이 동작을 기대할 수 있습니다. 페이지를 식별하기 위해 슬래시로 구분 된 이름을 사용하는 접근법은 해당 문자열을 폴더 위치에 연결하는 원래의 접근 방식에서 비롯된 것입니다. 따라서 /users/halfer.html은 동적 라우팅이 인기를 얻기 전에 users이라는 폴더에있는 파일 halfer.html을 자체 웹/가상 루트에 넣었을 것입니다.

즉, 해당 페이지에있는 경우 프로토콜 참조 (예 : http://) 또는 슬래시 (즉, 가상 호스트 루트)로 시작하지 않는 링크는 현재 주소와 관련이 있으므로 BringMeAnother.html은 사실 참조 /users/BringMeAnother.html.

이제 현대 라우팅을 사용하면 .html 접미사가 중복되므로 삭제할 수 있습니다. 그러나 상대 링크에 대한 "폴더 기반"접근 방식은 여전히 ​​브라우저에서 존중합니다. 따라서이 페이지의 링크는 BringMeAnother이며 /users/BringMeAnother 경로로 연결됩니다.


귀하의 의견과 관련하여 일부 라우팅 시스템의 구현은 제 의견으로는 부분적입니다. 그들은 항상 URI 경로를 컨트롤러, 메서드 및 매개 변수로 변환하지만 경로 하드 와이어 링을 피할 수 있도록 명명 된 경로를 모두 제공하지는 않습니다. 그러나 CodeIgniter에 추가하는 것은 매우 간단합니다 (물론 아직 제공되지 않았는지 확인하십시오!).

다음은 예입니다. /users/:user_name 경로가 컨트롤러 UserController 및 방법 run을 가리키고이 링크의 각 유스 케이스를 수동으로 연결한다고 가정 해 보겠습니다. 그런 다음 경로 이름을 /browse/users/:user_name으로 변경하기로 결정했습니다. 이는 20 개 장소에 배선 했으므로 문제가됩니다.

해결책은 이름을 지정할 수있는 방법을 통해 경로를 추가하는 것입니다. 심포니 1이 구문을 통해이 작업을 수행 :

@users?user_name=halfer 

라는 이름의 경로가 "사용자가"경로 정의 (예를 들어 /browse/users/halfer)이었다 무엇이든에게 확장 될 것이라는 점을 의미한다. 그러나, 나는 당신이 프레임 워크를 바꿀 것을 제안하지 않는다.경로 정의에 대해 이름을 저장하고 라우팅 시스템에 자동으로 추가하는 사용자 정의 메소드를 추가하기 만하면 각 유스 케이스에서 경로가 어떻게 보이는지 직접 확인하지 않아도됩니다.

+0

감사합니다. 나는 한 가지 문제를 발견했다. 기본 라우팅을 사용하면 내 홈페이지에 www.mysite.com/ 대신 www.mysite.com/controller/method/language/page와 같은 것이 있습니다. 즉, 로컬 링크는 www.mysite.com/otherpage가 고장 났음을 의미합니다. www.mysite.com/controller/method/language/otherpage 대신. 환영 페이지를 만들고 리디렉션 할 시간. 더 나은 해결책이 있습니까? – BringMeAnother

+0

@BringMeAnother : 게시물을 업데이트했습니다. 저는 CI를 잘 모르기 때문에 구현에 많은 도움을 줄 수는 없지만 그렇게 할 수 있습니다. – halfer