2012-06-06 6 views
12

Moim zamiarem nie jest porównywanie ani omawianie, które ramy są lepsze. Znam moc zarówno z CakePHP, jak i Railsów. Jestem pewien, że jest sposób na robienie podobnych rzeczy w obu z nich.Od Rails 3.2 do Cake PHP 2.0. Jak wykonać typowe zadania w Railsach?

Tak, to jest sytuacja: w Railsach, jestem przyzwyczajony do robienia rzeczy, które chciałbym zrobić na CakePHP (niektóre z nich nie znalazłem w dokumentacji).

Są to:

Zarządzanie pakietami

W Rails, mam "Gemfile" plik, w którym piszę wersję każdego "gem" używane w aplikacji. Jeśli chcę uaktualnić lub obniżyć wersję, zmieniam wersję i uruchamiam polecenie "aktualizacja pakietu". Jak aktualizujesz wtyczki? Czy używasz narzędzi takich jak GIT do kasowania każdej z nich do nowszych wersji?

Migracje

Kiedy muszę zmienić bazę danych, utworzyć pusty plik „migracji” za pomocą polecenia konsoli „Szyny generować migracji”. Następnie w wygenerowanym pliku dodaję zmiany, np. "Rename_column: users,: address,: location". Następnie uruchamiam "rake db: migrate", a baza danych jest migrowana. Jak to zrobić w CakePHP?

Automated Deployment

Wdrożenie w Rails można zautomatyzować za pomocą "Capistrano" Ruby gem. Zasadniczo uruchamiam "cap production deploy" w linii poleceń. Następnie, w oparciu o instrukcje w pliku "deploy.rb", loguje się do serwera (serwerów), klonuje najnowszą wersję kodu z repozytorium git i tworzy kopię zapasową bieżącej wersji, aby można było ją wycofać. Może również tworzyć dowiązania symboliczne dla "udostępnionych" folderów (takich jak przesyłane przez użytkownika), rekompilować zasoby, uruchamiać oczekujące migracje, instalować nowe zależności, restartować niektóre procesy serwera, ponownie uruchamiać samą aplikację i wykonywać inne zadania z wiersza poleceń. Czy jest coś podobnego w CakePHP?

Aktywa kompresji

W Rails, gdy jestem w trybie produkcyjnym, CSS i JS aktywa są automatycznie skompilowany do pojedynczych plików i regenerować po każdym wdrożeniu. To jest natywna funkcja w Railsach 3.1+. Czy to możliwe w CakePHP?

Pracownicy i Praca Tło

Szyny mogą korzystać klejnot zwany „delayed_job” kolejkować zadania będą wykonywane w tle przez „pracowników”, jak wysyłanie wiadomości e-mail po rejestracji użytkownika, na przykład. Jak to robisz?

Przestrzenie nazw dla kontrolerów

Jeśli chcę utworzyć interfejs administratora lub usługę internetową (przy użyciu przestrzeni nazw „API”, na przykład), lub nazw „mobile”, po prostu stworzyć odpowiednie foldery w folderze "kontrolery". Następnie umieściłem tam kontrolery i utworzyłem trasy, aby uzyskać do nich dostęp. Jaki jest najlepszy sposób na zrobienie tego w Cake?

model dostępu metody z widokiem

Wydaje się, że CakePHP zwraca tablicę asocjacyjną kiedy łapię dane z bazy danych, a nie prawdziwymi „obiekty”. Tak więc nie mogę uzyskać dostępu do metod modelowania. Załóżmy, że moja klasa UserModel udostępnia metodę o nazwie "wiek", która oblicza aktualny wiek użytkownika na podstawie jego urodzin. W Railsach mogłem to zrobić w widoku: <% = @ user.age%>. Potrzebuję stworzyć pomocnika widoku do zrobienia tego w Cake? Podobnie jak calc_user_age ($ user); ?> (lub coś w tym stylu)? Inna sytuacja: Załóżmy, że chcę uzyskać ostatni komentarz od użytkownika, a w komentarzu wstaw link do odpowiedniego wpisu, używając tytułu wpisu. W Railsach zrobiłbym coś w stylu @ user.comments.last.post.title, aby uzyskać tytuł posta. Jak mogłem to zrobić w Cake, bez użycia tej funkcji "recursive = 3", która pobiera mnóstwo niepotrzebnych danych?

Chaining modelu celownicze

Załóżmy mam model o nazwie post. W Railsach mogę tworzyć zakresy w modelach i miksować je tak, jak chcę. Jeśli chcę uzyskać "5 ostatnio opublikowanych postów z kategorii Programowanie zamówione przez najczęściej odwiedzanych", na przykład nazwałbym je w ten sposób: "Post.published.from_category (" programming ") most_accessed.limit (5) ". Jeśli chcę tylko wersje robocze uporządkowane według ostatnich, zintegrowane z paginacją, nazwałbym "Post.drafts.recent.page (2)". Jaki jest najlepszy sposób tworzenia i łączenia zakresów w CakePHP? Zbuduj dynamicznie tablicę warunków i wyślij ją jako parametr "znajdź"?

Testy

Jakie są narzędzia do testowania przyjęte przez społeczność CakePHP? Muszę przetestować modele i ich metody, przetestować kontrolery i ich odpowiedzi i zmienne, przetestować zawartość widoków (także interakcję Javascript), stworzyć urządzenia itp. Chciałbym też wiedzieć, czy istnieje sposób na stworzenie czegoś takiego jak autotest, które uruchamiają testy po zapisie pliku.

Cóż, w zasadzie są to punkty. Przepraszam za długi post i za mój błąd i nadmiarowy angielski (nie jestem native speakerem). Poza tym nie jestem ekspertem. Więc mogę tu napisać coś złego.

Mam nadzieję, że możemy mieć dobrą rozmowę. Dziękuję Ci!

Odpowiedz

12

Zarządzanie pakietami

AFAIK nie ma aktualne i szeroko stosowanego menedżera pakietów. Zwykle dodajemy wtyczki za pomocą gita. Wtyczki są podobne do klejnotów w RoR, jak sądzę.

Edytuj: Jest teraz composer, który jest obecnie używany przez CakePHP i wiele wtyczek.

Migracje

Użyj CakeDC migrations plugin lub build in schema shell.

Automated Deployment

Używamy fabric. Afaik nie ma wtyczki do ciast, która zrobi, o czym wiem.

aktywami Kompresja

Use this plugin.

Przestrzenie nazw dla kontrolerów

Wystarczy umieścić je w folderze kontrolera i use the Router tworzenie tras dla nich. W taki sam sposób, w jaki opisujesz to dla Rails.

model dostępu metody z widokiem

co? Robisz to w Rails? Nie lubię tego. W CakePHP nie powinieneś tego robić i IMO nie jest w żadnej aplikacji MVC.

Ustaw potrzebne dane w widokach z kontrolera.

$this->set('data', $this->Model->yourMethod()); 

Pracownicy & Backround Praca

Można to zrobić przez writing shells.

łańcuchowym modele

łańcuchowym modele w CakePHP odbywa koryta associations. I tak, będą one dostępne jak np. $ This-> User-> Post-> find ('first') na przykład. Można również zbudować complex find queries i warunki w wielu tabelach.

Testy

CakePHP stosuje phpunit do testowania urządzenia. Przeczytaj o tym artykuł: this section w książce CakePHP.

Moja rekomendacja

Przeczytaj książkę: book.cakephp.org Na pewno odpowie na większość pytań i pokazać, jak to zrobić myśli. Jakość dokumentacji wersji 2.0 jest doskonała.

+1

Witam burzum. Dziękuję za Twoją odpowiedź! Na pewno popatrzę. Jeśli chodzi o temat "Dostęp do metod modeli z widoku", uważam, że nie było to wystarczająco jasne. Nigdy nie odzyskać wpisów z modelu w widoku. Robię to w kontrolerze. Mogę to nazwać metodą "age" w obiekcie '@ user' przekazanym do widoku, np.' @ User.age' (metoda dynamicznie obliczająca wiek użytkownika na podstawie jego urodzin). –

+0

Napisz pomocnika, ale ponieważ jest to operacja na danych, powinieneś to zrobić w afterFilter() modelu IMO. Czy mogę zapytać, dlaczego podałeś słabą odpowiedź, która po prostu odpowiada na jeden z twoich punktów, tak jak należy !? – burzum