2012-02-11 6 views
8

Где я могу разместить свою «глобальную» функцию, которая будет проверять, если пользователь вошел в систему?Глобальная функция CodeIgniter

Потому что я хочу сделать что-то вроде: пользователь может просматривать некоторые страницы только тогда, когда функция isLogged() возвращает TRUE, и мне придется использовать ее в некоторых представлениях, поэтому она должна быть «глобальной» функцией, с которым я могу получить доступ из любого места.

Возможно ли это? Или есть какое-то лучшее решение для этого?

ответ

10

Возможно, вы должны поместить его в библиотеку и автозагрузить библиотеку. Когда вам нужно использовать флаг «logged_in» в представлении, передайте его с контроллера. Пример:


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', 
    ... 
} 

`приложение/контроллеры/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

Должен ли 'Auth' быть строчным регистром в' $ this-> Auth-> logged_in() '? – dangel

+0

Что такое

+1

@SvenB В большинстве «старых» фреймворков (CI, Kohana 2.x и т. Д.) Корневой каталог сети содержит все файлы приложений (контроллеры и т. Д.), Поэтому технически можно просто перейти в '/ application/libraries/Auth .php' и загрузите только этот файл. Константа 'BASEPATH' определяется в файле' index.php', поэтому, если ваш запрос не проходит через этот файл (например, обычный запрос сайта), эта строка останавливает доступ к файлу. См. Также: http://en.wikipedia.org/wiki/Defence_in_depth – Joe

5

Вы используете библиотеку аутентификации? Если нет, я бы предложил его. У них есть такие функции.

Tank Auth например имеет: is_logged_in(), который делает именно то, что вы хотите!

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

Для получения дополнительной информации о том, какие библиотеки использовать вы должны проверить этот ответ, который сравнивает все LIBS: https://stackoverflow.com/a/476902/576223

Если вы не хотите библиотеку аутентификации вы можете сделать, как предложил Джо

+0

Я как раз собирался предложить ** Tank Auth **, большинство людей пытаются заново изобрести колесо с помощью фреймворков, когда есть уже фантастические библиотеки вокруг. – Jakub

+0

Я предложил ** ** библиотеку аутентификации, просто очень урезанную, чтобы дать ему представление о том, как это работает и как управлять потоком приложения: P – Joe

+0

Yeh Я знаю, я просто писал свой ответ как ваш подошел, поэтому я его отредактировал. :) – bottleboot

0

вы можете использовать MY_controller со всеми функциями, необходимыми на каждой странице вашего сайта. и наследует от него все контроллеры. read this oficial wiki

Смежные вопросы