2013-02-24

[kohana][php] Upgrade z wersji 3.1 do 3.3

Oczywiście jak to przy zmianie wersji frameworka kohana (po dłuższym czasie) jest niezła zabawa z dostosowaniem aplikacji. Zmian jest sporo - poniżej przedstawiam te, które udało mi się zarejestrować szybko przerabiając swoją własną stronkę, która wcześniej stała na wersji 3.1:

Zmiana wielkości liter


Zmienia się wielkość liter katalogów i plików w aplikacji. Na przykład zamiast
application/classes/model/flickr.php
musi być
application/classes/Model/Flickr.php

Brak modułu kohana_cache


Jeśli ktoś używał odpalał ten moduł w bootstrap.php to musi z tego zrezygnować.

Cookie salt


Należy w bootstrap.php (np po i18n) wpisać coś takiego:
Cookie::$salt = 'Your-Salt-Goes-Here';
źródło: http://forum.kohanaframework.org/discussion/8873/cookie-salt-problem/p1

Konfiguracja MySQL


Trzeba zmienić w pliku konfiguracyjnym 'type' z 'mysql' na 'MySQL'.
źródło: http://stackoverflow.com/questions/13043412/error-when-using-auth-with-orm-driver-kohana-3-3-0

Odczyt danych z pliku konfiguracyjnego


Przestaje istnieć - teraz zamiast dawnego:
$config = Kohana::config('nazwa_pliku_konfiguracyjnego');
plik konfiguracyjny odpalamy następująco:
$config = Kohana::$config->load('nazwa_pliku_konfiguracyjnego');

Main request


Wygląda teraz mniej więcej tak u mnie:
$request = Request::factory();
$response = $request->execute()->send_headers(TRUE);

if($response->body()){
    $total = array(
        '{memory_usage}' => number_format((memory_get_peak_usage() - KOHANA_START_MEMORY) / 1024, 2).'KB',
        '{execution_time}' => number_format(microtime(TRUE) - KOHANA_START_TIME, 2).' s.'
    );
    
    echo $response->body(strtr((string) $response, $total));
}

Redirect


Zamiast:
$this->request->redirect(Url::base(FALSE, FALSE).'start');
mamy teraz:
$this->redirect(URL::base(FALSE, FALSE) . 'start');
źródło: http://stackoverflow.com/questions/13088601/kohana-errorexception-fatal-error-call-to-undefined-method-requestredirec

Query builder


Zamiast:
$count = $q_count->select('count("*") AS ilosc')->group_by('tytul','tresc')->execute()->get('ilosc');
mamy teraz:
$count = $q_count->select(array(DB::expr('COUNT(*)'),'ilosc'))->group_by('tytul','tresc')->execute()->get('ilosc');
źródło: http://kohanaframework.org/3.3/guide/database/query/builder

Parametry funkcji action


Zamiast:
public function action_index($kod=''){}
mamy teraz:
public function action_index(){ $kod = $this->request->param('kod'); }

To tyle w mocno telegraficznym skrócie... wg mnie są to dobre zmiany! :)

Więcej informacji: http://kohanaframework.org/3.3/guide/kohana/upgradingguide/kohana/upgrading

2013-02-20

[js][jquery] Mały przykład regular expression

Wykonanie "if'ka" jedynie w przypadku wpisania do html'owego inputa (o id badane_pole) numeru zgodnie z formatem:

OW/EEE/RR/NNNNN

gdzie:
OW - dwie cyfry
EEE - trzy cyfry lub duże litery
RR - dwie cyfry
NNNNN - pięć cyfr

var rege = /^([0-9]{2})+\/([A-Z0-9]{3})+\/([0-9]{2})+\/([0-9]{5})$/;
if(rege.test($("#badane_pole"))){
    //gogogo!
}

2013-02-17

[psql][mysql] Kilka różnic między MySql'em a PostgreSql'em

Po dłuuugiej przerwie usiadłem przed bazą MySQL'a i próbuję jakoś ją ogarnąć. Ostatnio stykam się głównie z PostgreSQL'em i nabrałem już kilka nawyków, które nie do końca się sprawdzają przy MySQL'u. Jest między tymi bazami kilka różnic w obsłudze i postaram się je w tym wpisie zbierać i przedstawić.
Odwykłem od nakładek typu phpMyAdmin - wszystkie zapytania i modyfikacje wykonuję w postgresie z konsoli i jest mi z tym dobrze. :) Spróbuję tak samo działać w MySQl'u.

Już na starcie niestety uderzył mnie w MySQL'u brak "podpowiadania" poleceń po wciśnięciu Tab - to jakaś masakra (EDIT: okazuje się że podpowiada jak się pisze dużymi literami). Nie podpowiada też ścieżki do pliku, który chciałbym na przykład wczytać...

Oto kilka różnic, które dostrzegłem po kilku chwilach:

Tworzenie nowej bazy danych


W PostgreSQL i w MySQL wygląda to tak samo:
CREATE DATABASE nazwa_bazy;

W postgresie można utowrzyć nową bazę jeszcze nie będąc w psql:
createdb -U nazwa_usera nazwa_bazy

W mysql pewnie też można ale ja tego póki co nie odkryłem... :)

Wejście do bazy danych


psql:
psql -W -U nazwa_usera nazwa_bazy

mysql:
mysql -u nazwa_usera -p -D nazwa_bazy

Wczytanie kodu SQL z pliku


psql:
$ psql -U nazwa_usera nazwa_bazy -f /var/www/projekt/sql/0001.sql

lub
\i /var/www/projekt/sql/0001.sql


mysql:
$ mysql -u nazwa_usera -p nazwa_bazy < /var/www/projekt/sql/0001.sql
lub
\. /var/www/projekt/sql/0001.sql
Wielkich różnic tutaj nie ma - oprócz wyżej wspomnianego braku podpowiadania...

Wyświetlenie baz danych

psql:
select datname from pg_database;
mysql:
show databases;

Wyświetlenie tabel bazy danych

psql:
\dt
mysql:
show tables;

Wyświetlenie szczegółów tabeli

psql:
\d nazwa_tabeli
mysql:
describe nazwa_tabeli;

Modyfikacja kolumny tabeli

psql:
ALTER TABLE t1 ALTER COLUMN test TYPE VARCHAR(255);
mysql:
ALTER TABLE t1 MODIFY test VARCHAR(255);



Jest na pewno jeszcze pół miliona więcej różnic - jak coś zauważę to dodam do listy.