2012-02-11 23 views
8

¿Dónde puedo ubicar mi función "global", que comprobará si el usuario está conectado?Función global de CodeIgniter

Porque quiero hacer algo como: el usuario solo puede navegar por algunas páginas cuando la función isLogged() devuelve TRUE, y yo tendría que usarla en algunas vistas, por eso debería ser una función "global", a la que puedo acceder desde cualquier lugar.

¿Es esto posible? O hay una mejor solución para esto?

Respuesta

10

Probablemente debería colocarlo en una biblioteca y cargar automáticamente la biblioteca. Cuando necesite usar el indicador "logged_in" en una vista, páselo desde el controlador. Ejemplo:


application/libraries/Auth.php

<?php defined('BASEPATH') OR exit('No direct script access allowed'); 

class Auth 
{ 

    public function is_logged_in() 
    { 
     // Change this to your actual "am I logged in?" logic 
     return $_SESSION['logged_in']; 
    } 

} 

application/config/autoload.php

... 
$autoload['libraries'] = array(
    ... 
    'auth', 
    ... 
} 

aplicación `/ controladores/welcome.php

<?php ... 

public function index() 
{ 
    $view_data = array 
    (
     'logged_in' => $this->Auth->logged_in() 
    ); 
    $this->load->view('my_view', $view_data); 
} 

application/views/my_view.php

<? echo $logged_in ? 'Welcome back!' : 'Go login!' ?> 
+0

debe 'Auth' ser minúscula en' $ this-> Auth-> logged_in() '? – dangel

+0

¿Qué es

+1

@SvenB Con la mayoría de los marcos "antiguos" (CI, Kohana 2.x, etc.), el directorio raíz web contiene todos los archivos de la aplicación (controladores, etc.), por lo que es técnicamente posible ir a '/ application/libraries/Auth .php' y que cargue solo ese archivo. La constante 'BASEPATH' se define en el archivo' index.php', por lo tanto, a menos que su solicitud atraviese ese archivo (por ejemplo, una solicitud de sitio normal), esa línea le impide acceder al archivo. Ver también: http://en.wikipedia.org/wiki/Defence_in_depth – Joe

5

¿Está utilizando una librería de autenticación? Si no, sugeriría uno. Vienen con funciones como esa.

Tank Auth por ejemplo tiene: is_logged_in(), que hace exactamente lo que usted quiere!

http://www.konyukhov.com/soft/tank_auth/

Para obtener más información sobre qué biblioteca de usar que debe salir esta respuesta que compara todas las librerías: https://stackoverflow.com/a/476902/576223

Si no desea que una librería de autenticación que puede hacer como se sugiere por Joe

+0

Estaba a punto de sugerir ** Tank Auth ** también, la mayoría de las personas trata de reinventar la rueda con marcos, cuando ya hay bibliotecas fantásticas alrededor. – Jakub

+0

Lo que sugerí ** es ** una biblioteca de autenticación, solo una muy reducida para darle una idea de cómo funciona y cómo controlar el flujo de la aplicación: P – Joe

+0

Sí, lo sé, estaba escribiendo mi respuesta como suya surgió, así que lo edité. :) – bottleboot

0

puede usar MY_controller con todas las funciones necesarias en cada página de su sitio web. y heredar todos los controladores de ella. read this oficial wiki

Cuestiones relacionadas