Въпрос за Codeigniter

Pavkatar

Registered
Здравейте,
имате ли идея как го правят в CI-то пренасочването на url-лите без .htaccess. Тоест как saitati.com/controller/function да води до index.php ?

Защото съм виждал в други FW-та с .htaccess го правят, а тук нз как става :)

П.С.
saitati.com/controller/function - Това е за админа :D
 
Ами реално то не им трябва пренасочване. Ще започна с url-та им както са по подразбране.

www.example.com/index.php/controller/method

Както виждаш тук ти винаги зареждаш index.php и след него слагаш controller и method.

А когато премахнеш index.php с някой от .htaccess файловете ти сам пренасочваш всички заявки към index.php.


А сега как index.php прави цялата магия?

Ако погледнеш index.php в него няма нищо особено. Декларира си няколко константи и променливи, но на последния ред (при мен 115)
require_once BASEPATH.'codeigniter/CodeIgniter'.EXT;
зареждаш FRONT Controller-a. Ето той вече прави всичко.

В него декларира още няколко константи, след това включва още няколко файла. Включва файл в зависимост от това дали ползваш php 5 или php 4 и маркира си начални и крайни точки за benchmark класа, също включва куки ако си направил такива, а теб те интересува кода от ред 125 до ред 158


/*
* ------------------------------------------------------
* Load the app controller and local controller
* ------------------------------------------------------
*
* Note: Due to the poor object handling in PHP 4 we'll
* conditionally load different versions of the base
* class. Retaining PHP 4 compatibility requires a bit of a hack.
*
* Note: The Loader class needs to be included first
*
*/
if ( ! is_php('5.0.0'))
{
load_class('Loader', FALSE);
require(BASEPATH.'codeigniter/Base4'.EXT);
}
else
{
require(BASEPATH.'codeigniter/Base5'.EXT);
}

// Load the base controller class
load_class('Controller', FALSE);

// Load the local application controller
// Note: The Router class automatically validates the controller path. If this include fails it
// means that the default controller in the Routes.php file is not resolving to something valid.
if ( ! file_exists(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT))
{
show_error('Unable to load your default controller. Please make sure the controller specified in your Routes.php file is valid.');
}

include(APPPATH.'controllers/'.$RTR->fetch_directory().$RTR->fetch_class().EXT);
 

Back
Горе