[CodeIgniter 2.2][XAMPP] Rozpoczęcie pracy

Witam, w tym poście opiszę jak szybko rozpocząć pracę z CodeInteger 2.2 i go skonfigurować.



Także zaczynamy od pobrania paczki z CI2: link.

Dalej rozpakowujemy paczkę i wrzucamy do folderu z naszymi stronami[dla XAMPP`a będzie to katalog htdocs/]

Następnie zmieniamy nazwę naszego projeku na własną i wchodzimy do niego. Widzimy tam 3 foldery[application, system, user_guide] i 2 pliki: index.php i license.txt. Możemy w tej chwili usunąć user_guide(albo zostawić jeśli będziemy z niej korzystać, chociaż przed wrzuceniem na hosting warto się tego pozbyć; wszystko i tak jest do znalezienia na oficjalnej stronie: link), oraz tworzymy folder o nazwie public/.

Uwaga w folderze public będziemy przechowywać cały content naszej strony, oprócz widoku(czystego kodu html + php). Czyli tam będą znajdować się nasze skrypty w JavaScript[tworzymy dla niego folder js/], Arkusze stylów[tworzymy folder css/], obrazki[tworzymy folder images/], czy też inne pliki do pobrania[files/] lub miejsce na pobrane pliki od użytkownika[uploads/]


public/
--------js/
--------css/
--------images/
--------files/
--------uploads/

Tak to wygląda u mnie.

Konfiguracja lokalnego środowiska prac(Windows 7)

Skoro już mamy utworzony folder public, potrzebujemy jeszcze utworzyć odpowiednie zasady w pliku httpd-vhosts.conf, tak aby przekierowanie do naszego serwera ustawiało domyślny katalog na folder public/. Przykład:

<VirtualHost *:80>
   ServerName test.localhost
   DocumentRoot G:\xampp\htdocs\Test\public
   SetEnv APPLICATION_ENV "development"
   <Directory G:\xampp\htdocs\Test\public>
       AllowOverride All
       Order allow,deny
       Allow from all
   </Directory>
</VirtualHost>

UWAGA: w XAMPP folder ten znajduje się w xampp\apache\conf\extra\.

UWAGA: w DocumentRoot i Directorypodajemy ścieżki do własnego folderu z projektem.

UWAGA: w wersji końcowej, na serwerze pamiętajmy aby nie dopisywać liniki:
SetEnv APPLICATION_ENV "development"
która włącza wersję deweloperską. Dla nas jest ona przydatna gdyż pozwala na wyświetlanie błędów w php ale klientowi nie jest taka informacja potrzebna.

Teraz została jeszcze sprawa z plikiem etc w windows, otwieramy notatnik z prawami admina, przechodzimy do folderu:
 C:\Windows\System32\drivers\etc

otwieramy plik hosts, gdzie musimy dopisać na końcu (koniecznie bez #) linijkę:

127.0.0.1 test.localhost

Po tak wykonanej akcji możemy wpisać w przeglądarkę nasz adres i powinniśmy zostać przekierowani na naszą stronę. Oczywiście najpier należy wyłączyć i włączyć ponownie nasz serwer Apache żeby ustawienia z pliku  httpd-vhosts.conf, weszły w życie.

Konfiguracja CodeIgnitera 2:


Teraz możemy przystąpić do konfiguracji CI2. Tutaj warto na początku wejść w application/config/config.php

tam szukamy parametru $config['base_url'] i zmieniamy jego wartość na adres naszej strony np: 'http://test.localhost/'; Całość wygląda tak:

$config['base_url']    = 'http://download.localhost/';

Dalej możemy zmienić język aplikacji:

$config['language'] = 'polish';

oraz ustawić encryption key(np. poprzez wygenerowanie klucza w tym generatorze):

$config['encryption_key']  = "????"

Jeśli chodzi o podstawowe opcje to wszystko w tym pliku co na początku nas interesuje. Przechodzimy do pliku autoload.php: tutaj możemy dopisywać nazwy bibliotek które zawsze będą wczytywane przy jakim kolwiek wejściu na naszą stronę.
Ogólnie możemy właśnie rozróżnić 3 stany ładowania bibliotek:
-globalna: to właśnie te biblioteki wpisane do pliku autoload.php. Wczytywane z każdą stroną. Wpisujemy tutaj tylko takie biblioteki z których korzystamy na każdej albo prawie każdej stronie. Inaczej ich ładowanie będzie tworzyć narzut i czas strony niepotrzebnie się wydłuży.
-klasowa: biblioteki ładowane w konstruktorze:

function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form', 'url'));
    }


można ich używać w danym kontrolerze.
-lokalne: ładowane w akcji kontrolera. Tylko wtedy gdy są potrzebne. Najoptymalniejsza metoda ale trzeba się pilnować i za każdym razem ładować potrzebne nam biblioteki:

 public function index()
    {      
            $this->load->helper(array('form', 'url'));
            $this->load->view('main');         
    }


Właściwie możemy przejść dalej bo w uniwersalnym układzie nie ma rzeczy której będziemy na 100% używać. 
UWAGA: Oprócz bibliotek(libraries) mamy także inne typy obiektów do ładowania. My najczęściej będziemy korzystać jeszcze z helper. Różnica między nimi jest taka że biblioteki dają nam konkretną funkcjonalność np. obsługę baz danych, danych z sesji, plików cookies. Natomiast obiekty klasy helper ułatwiają nam jedynie korzystanie z pewnych funkcji. np. url - pozwala nam pobrać poprzez funkcję base_url() adres naszej strony. Aczkolwiek nie daje nam konkretnych możliwości.

Kolejnym plikiem wartym uwagi jest database.php gdzie przechowywane są dane do połączenia z bazą danych. Możemy je skonfigurować globalnie tam, albo lokalnie w kontrolerze. Warto właśnie pamiętać że pliki w folderze config/ odnoszą się globalnie do wszystkiego. Tutaj ustawiamy tylko to co potrzebujemy wszędzie a wszystko inne robimy lokalnie. Ułatwi to nam proces tworzenia aplikacji. Jeśli nie będziemy korzystać z bazy danych to zostawiamy ten plik nietknięty.

Kolejnym ważnym plikiem jest plik routes.php, w nim ustawiamy domyślny kontroler, kontroler dla braku strony i ewentualnie własne kontrolery gdy ich wywołania na stronie będą się różnić. Ogólnie w tej chwili nie musimy nic tam zmieniać. Chyba że chcemy aby nasz domyślny kontroler nie nazywał się welcome.php a np. index.php, wtedy zamiast 'welcome' wpisujemy 'index':

$route['default_controller'] = "index";

UWAGA: pamiętamy aby pominąć przyrostek .php

Dopisanie zasad wpisywania ścieżek mod_rewrite:

Jeśli chcemy aby w wywołaniu akcji kontrolera nie trzeba było pisać index.php co jest nieco irytujące. Musimy jeszcze utworzyć dwa pliki .htacces:
#Pierwszy umieszczamy w folderze public/:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]



#Drugi w każdym katalogu public:
  
RewriteEngine off

, dzięki temu będziemy mogli się w przyszłości do nich odnieść jak do zwykłych plików na serwerze np.:  

<link rel="stylesheet" href="css/style.css"> 

Bez nadpisania zasad dla każdego folderu w public po prostu nasz framework szukałby odpowiadającego mu kontrolra. ponieważ zawsze do adresu dołączamy przyrostek index.php, który zdefiniowaliśmy w pierwszej zasadzie.