문제

이것은 효과가 있어야하므로 왜 작동하지 않는지에 대해 정말 당황합니다.

각 관리자 페이지 상단에 $ 세션 클래스 메소드를 사용하여 사용자가 로그인했는지 확인하고 있습니다. 그러나 사용자의 로그인 여부와 사용자의 역할 레벨에 따라 헤더 파일을 동적으로 조정하려고합니다.

그래서 확인합니다 $session->is_logged_in() 그런 다음 계속해서라는 변수를 정의했습니다. $logged = true; 나중에 사용합니다. 그런 다음 a를 사용합니다 $user->find_by_id($session->id) 방법 새 사용자 객체 및 저장을 만드는 방법 $user->role_level 새로운 var에서 $role_level 쉽게 사용하기 위해.

이것은 모두 페이지 상단 근처에서 일어나고 있습니다. 과거의 양식 처리 등 페이지 아래로 include("../_layouts/header.php") 명령. 그런 다음 Header.php 파일에서 다음과 같은 점검을 거의 사용하지 않습니다. if(!$logged) { ... } else { ... }. 하지만...

다음 오류가 발생합니다.

Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138

어떻게 이럴 수있어? Header.php를 포함하기 전에 파일의 VAR을 정의하고 있습니다! 그게 효과가 없어야합니까?

참고로, 내가 사용하려고 할 때까지 모든 것이 잘 작동했습니다. $logged header.php 파일에서

도움이 되었습니까?

해결책

변수는 포함 된 파일로 전파되므로 포함을 호출 할 때 변수가 설정되어 있지 않아야합니다. 그렇다면 확인한 다음 해당 시점에서 변수가 설정되지 않은 이유를 알아 봅니다.

예를 들어, "if"블록 내부 또는 함수 내부에 $ 로그인 한 경우 그 외부에서 전파되지 않습니다. 가장 바깥 쪽 범위에서 정의해야합니다 (포함 명령문을 호출하는 것과 동일한 수준). . 또한 사용자가 로그인 한 경우뿐만 아니라 사용자가 로그인되지 않은 경우를 정의해야합니다. 변수가 False로 초기화되지 않은 경우 (! $ 로그인) 확인이 경고를 발행하는지 확인합니다. $ logged = false; 작업의 시작 부분에.

다른 팁

매우 간단한 것을 시도하십시오

// file1.php
$var = "foobar";

// file2.php
include("file1.php"); // or require("file1.php");
die($var);

작동합니까? 어쩌면 그것은 코드 밖에서 문제 일 것입니다.

단지 의견 ... 글로벌 공간에서 실행할 코드를 포함하고 정의되는 다른 글로벌 변수에 따라 어디에나 파일을 포함시키고 header.php 내부에 코드를 적절한 기능으로 구성하도록하십시오. 그런 다음 Header.php에서 출력을 원하는 경우 $를 인수로 $로 호출하십시오. 이렇게하면 코드를보다 응집력 있고 테스트하기가 더 쉬워집니다 (단위 테스트에서와 같이).

대신에 if (!logged), 노력하다 if (empty($logged)). 변수가 설정되지 않은 경우 통지를 생성하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top