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!
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). –
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