Pergunta

Isso deve funcionar, então eu realmente estou perplexo sobre por que ele não está funcionando.

Estou verificando para ver se um usuário está conectado usando um método de classe $ session no topo de cada página de administração. No entanto, eu quero ajustar dinamicamente o arquivo de cabeçalho, dependendo se um usuário está conectado, e em que nível de função que o usuário tem.

Então eu cheque $session->is_logged_in() e então eu fui em frente e definir uma variável chamada $logged = true; para usar mais tarde. Eu, então, usar um método $user->find_by_id($session->id) para criar um novo objeto de usuário e armazenar $user->role_level em uma nova var chamado $role_level para fácil utilização.

Isso é tudo acontecendo perto do topo da página. Parte inferior da página de processamento de forma passada, etc., é o comando include("../_layouts/header.php"). Em seguida, no arquivo header.php, eu uso pequenos cheques como if(!$logged) { ... } else { ... }. No entanto ...

Estou recebendo os seguintes erros:

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

Como pode ser isso? Eu estou definindo os vars no arquivo antes de incluir header.php! não deveria esse trabalho?

fina FYI, tudo estava funcionando até que eu tentei usar $logged no arquivo header.php.

Foi útil?

Solução

As variáveis ??se propagam para os arquivos incluídos, assim que deve ser, que a variável não está definida quando você chamar o incluem:. Tente verificar se assim for, em seguida, descobrir por que a variável não definido nesse ponto

Por exemplo, se você definiu $ registrado dentro do "se" bloco ou dentro de uma função, então ele não vai propagar fora dela: você deve defini-lo no escopo externo (ao mesmo nível em que você chamar o include). E você deve defini-lo para o caso de que o usuário não está logado, não só para o caso quando o usuário está conectado. Se a variável não é inicializado como false, a verificação if (! $ Logado) emitirá aviso. Say $ logado = false; no início do seu trabalho.

Outras dicas

Tente algo muito simples, como

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

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

Será que funciona? Talvez seja um problema fora do seu código.

Apenas uma opinião ... em vez de incluir código para executar no espaço global e dependendo de outra variável global que está sendo definido, incluem o arquivo onde quer e tem o código dentro header.php ser organizados em funções apropriadas. Então onde você quer a saída do header.php, chamar a função apropriada com os US $ registrado como um argumento. Isso ajudará a tornar o seu código mais coesa e mais fácil de teste (como em testes de unidade).

Em vez de if (!logged), tente if (empty($logged)). Isso não irá gerar uma notificação nos casos em que a variável não foi definida.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top