
Przy przenoszeniu aplikacji z Cake'a 1.1 do 1.3 mogą Was spotkać różne problemy, w zależności od samej aplikacji, stopnia jej skomplikowania i użytych bibliotek. Poniżej wymieniliśmy najważniejsze rzeczy jakie trzeba będzie zmienić (o ile z nich korzystaliście).
Od czego zacząć? Oczywiście od pobrania i zainstalowania najnowszej wersji CakePHP. Nie próbujcie raczej nadpisywać starych plików. Znacznie lepiej jest zainstalować "świeżą" wersję i skonfigurować ją wg. potrzeb, na podstawie starych plików (bootstrap.php, core.php i database.php). Potem wystarczy przekopiować wszystkie nasze pliki (modele, kontrolery, widoki, pluginy, pliki graficzne, css, js i inne, których używaliśmy). Dzięki temu będziemy mieli dwie niezależne instalacje i zawsze będziemy mogli sprawdzić jak dany element wyglądał (działał) w starej wersji.
Zacznijmy od konfiguracji:
- W pliku app/config/core.php nie definiujemy już stałych PHP, tylko korzystamy z obiektu Configure.
- Nie ma już route-ów administracyjnych. Teraz zamiast:
Configure::write('Routing.admin', 'admin');należy użyć:Configure::write('Routing.prefixes', array('admin')); - Zmienił się sposób konfiguracji routingu (app/config/routes.php), poprzednio:
$Route->connect();
teraz:Router::connect();
Widoki:
- Trzeba będzie zmienić rozszerzenia plików widoków z "thtml" na "ctp". Można to
łatwo zrobić jakimś programem do masowej zmiany nazw plików. Jeżeli jednak Wam
się nie chce, to można po prostu ustawić w kontrolerach (lub w
app_controller.php):
$this->ext = '.thtml';
- Funkcja renderElement() została zastąpiona funkcją element().
- Może was zaskoczyć zniknięcie tabeli z debugiem zapytań sql w stopce layoutu.
Zmienna $cakeDebug została usunięta. Teraz aby zobaczyć debug sql należy samemu dodać do layoutu:
echo $this->element('sql_dump'); -
Najwięcej pracy możecie mieć z formularzami. Z Html helpera został wydzielony Form helper, do przerobienia są więc wszystkie formularze, które zostały za jego pomocą zbudowane. Należy tu zwrócić uwagę na:
- oczywiście zmiana helpera z $html na $form,
- zapis nazw modeli i pól - wcześniej "User/name", teraz "User.name",
- wyświetlanie błędów walidacji oraz samą walidację (o czym poniżej),
- do przerobienia macie wszystkie wystąpienia wywołań funkcji:
- $html->formTag(); - na $form->create();
- $html->selectTag(); - na $form->input();
- $html->input(); - na $form->input();
- $html->password(); - na $form->input();
- $html->textarea(); - na $form->input();
- $html->hidden(); - na $form->input();
- $html->file(); - na $form->input();
- $html->submit(); - na $form->input(); lub na $form->end();
- Jeżeli używaliście html helpera do tworzenia linków graficznych:
$html->link($html->image());
Pamiętajcie o dodaniu i ustawieniu opcji "escape" na "false" - $html->truncate() nalezy zamienić na $text->truncate(). Zmienił się tu też nieco sposób podawania parametrów.
- Jeżeli chcecie zmienić domyślny tytuł strony (tag html "title") należy teraz używać:
$this->set('title_for_layout', ‘Nowy tytuł strony’).Zmienna "$pageTitle" nie jest już używana. - JavascriptHelper i AjaxHelper zostały zastąpione przez JsHelper i HtmlHelper.
Modele:
- Druga potencjalnie najbardziej pracochłonna czynność to przerobienie metod
"find" oraz "generateList". Wszystkie poniższe zastąpiła metoda "find" z
odpowiednimi parametrami:
find findAll findCount findNeighbours generateListPo szczegóły odsyłam do manuala, poniżej tylko orientacyjny przykład:1.1: $this->findAll($conditions, $fields, $order, $limit, $page, $recursive); 1.3: $this->find('all', array( 'conditions' => $conditions, 'fields' => $fields, 'order' => $order, 'limit' => $limit, 'page' => $page, 'recursive' => $recursive )); - Z modeli zniknęły stałe odpowiedzialne za walidację danych:
VALID_NOT_EMPTY, VALID_EMAIL, VALID_NUMBERNależy je zastąpić aktualnymi odpowiednikami (tu zaszło sporo zmian warto zapoznać się ze szczegółami). - Zniknęła metoda del() (podobnie jak remove()) - została zastąpiona przez delete():
dotąd: modelName->del(); teraz: modelName->delete();
Kontrolery, Komponenty. Biblioteki:
- Usunięto funkcję $this->cleanUpFields()
- Warto tu wspomnieć o nowej funkcji ułatwiającej kontrolę nad ładowanymi modelami:
$this->loadModel('nazwaModelu'); - W komponencie Session wymieniono metodę del() na delete():
dotąd:
$this->Sesion->del();
teraz:$this->Session->delete();
- Metoda setFlash() komponentu Session nie używa już layoutu lecz elementu. Jeżeli używaliście własnego layoutu dla tej metody należy przerobić go na element i zamiast zmiennej $content_for_layout użyć zmiennej $message.
- Jeżeli po wywołaniu metody $this->render() używaliście funkcji "exit", możecie ją usunąć - nie jest już potrzebna.
- Ładowanie plików "vendors":
dotąd:
vendor();
teraz:App::import('Vendor', 'nazwa'); - Wywołanie Sanitize:
dotąd:
uses('sanitize'); $san = new Sanitize(); $san->sql();teraz:App::import('Sanitize'); Sanitize::escape(); - Najważniejsze zmiany w bibliotece Folder:
- "mkdir" zastąpione przez "create",
- "mv" przez "move",
- "ls" przez "read",
- "cp" przez "copy",
- "rm" przez "delete".
- Metoda "del()" w komponencie Cookie została zastąpiona przez "delete()".
Na koniec zostaje nam gruntowne przetestowanie całej aplikacji.
Oczywiście od wersji 1.1 zmieniło się wiele, na pewno napotkacie też wiele innych rzeczy wymagających zmian. Powyżej opisaliśmy tylko najważniejsze.
Więcej informacji znajdziecie oczywiście w Google i pod poniższymi linkami:
- http://mark-story.com/posts/view/getting-a-new-oven-migrating-from-cakephp-1-1-to-1-2
- http://blog.bottomlessinc.com/2010/03/cakephp-convert-a-complex-find-condition-from-1-1-to-1-3/
- http://book.cakephp.org/view/411/Migrating-from-CakePHP-1-1-to-1-2
- http://book.cakephp.org/view/1561/Migrating-from-CakePHP-1-2-to-1-3
