1

(3 odpowiedzi, napisanych Ogólne)

daj więcej kodu

Wielu ludzi zakłada, że we frameworkach jest więcej magii niż jest faktycznie. Staraj się nie zapominać o podstawach OOP i praca z cakePHP będzie łatwiejsza.

w ResidentsController nadpisujesz beforeFilter i tracisz konfigurację z AppController (Auth działa na podstawie domyślnych ustawień i stąd error z nieistniejącym kontrolerem UsersController):

ResidentsController extends AppController{
function beforeFilter(){
  parent::beforeFilter();
  //...
}

Poza tym wywal login/logout z AppController - nie są to akcje, które mają być dostępne w każdym kontrolerze, który dziedziczy po AppController. One powinny siedzieć w ResidentsController. Analogicznie widoki: /app/views/residents/login.ctp

Mam nadzieję, ze pomogło wink

3

(5 odpowiedzi, napisanych Model-Widok-Kontroler)

a masz zdefiniowane relacje? Wrzuć więcej kodu, przede wszystkim model.

4

(4 odpowiedzi, napisanych Ogólne)

a wrzuć jeszcze kod kontrolera, który wywołujesz...

5

(10 odpowiedzi, napisanych Ogólne)

Mnie się nie podoba sprawdzanie ilości rekordów i decydowanie czy cache jest aktualny.

Dobry cache to taki, że
- przed wywołaniem find'a wiesz jak się nazywa plik, w którym wyniki wykonania find'a z danymi parametrami mogą się znajdować
- jeśli pliku nie ma - wywołuję find'a i zapisuję cache

Pliki cache mogą się nazyważ ModelName_jakiś_unikalny_string_wyliczalny_z_argumentów_find
Wtedy w afterSave (Delete itd.) możesz usuną pliki cache ModelName_*

Gdyby to zrobić ze sprawdzaniem ilości to w pesymistycznym wypadku wykonujesz
Select count(*) from news;
unserialize($dane_z_pliku_cache);
// ilość się nie zgadza
Select * from news;

To już lepiej od razu wykonać Select * from news; i włączyć memchache.

6

(3 odpowiedzi, napisanych Ogólne)

http://book.cakephp.org/view/270/Class- … -Variables

7

(3 odpowiedzi, napisanych Ogólne)

Nie tylko ładniejsze, ale bardziej poprawne. W specyficznym modelu układając query musiałbyś je budować tak:

"SELECT * FROM `".$this->tablePrefix.$this->table."` As ".$this->name." ..."

Sporo klepania po to, żeby po zmiania na przykład prefixu w configu dla bazy aplikacja się nie posypała. Bez tego też nie będę działać testy jednostkowe. A cały ten sposób budowania query jest znany klasie Model, więc naruszasz zasadę DRY oraz zamiast używać przetestowanej metody frameworka - dublujesz ją (tworzysz nowe miejsce na nowe bugi).

8

(5 odpowiedzi, napisanych Ogólne)

Ta metoda wywoływana jest przez metodę save() modelu, więc nie trzeba jej odpalać ręcznie w kontrolerze.

dzięki za podpowiedź, będę miał to na uwadze smile

No tak, faktycznie z tym contain to mnie fantazja poniosła.

A mogę zapytać, czemu te dane Ci przeszkadzają? Bo nie wpływają one na rozmiar zapytania, ponieważ tak czy siak musi być wykonany join z tabelą pośrednią.

Czy Twoja tabela pośrednia przechowuje jakieś dodatkowe dane, czy tylko klucze? Jeśli tylko klucze, to czy masz dla niej stworzony model i przy relacji Note habtm Tag masz parametr "with"?

spróbuj:

                'contain' => array(
                        'Note' => array(
                                'order' => 'Note.created DESC',
                                'fields' => array('Note.id', 'Note.created'),
                                'contain' => array()
                        )
                )

Nie do końca rozumiem jak to masz dwie identyczne aplikacje, ale rozdzielasz kontrolery i modele, ale tylko webroot masz wspólny?

No, ale stała WWW_ROOT służy do ustawienia ścieżki do Twojego webroot (http://book.cakephp.org/view/122/Core-D … -Constants)

13

(5 odpowiedzi, napisanych Ogólne)

spróbuj tak:

        var $validate = array(
                'title' => array(
                        'notempty' => array(
                                'rule' => array('notempty'),
                                //'message' => 'Your custom message here',
                                //'allowEmpty' => false,
                                //'required' => false,
                                //'last' => false, // Stop validation after this rule
                                //'on' => 'create', // Limit validation to 'create' or 'update' operations
                        ),
                ),

(możliwe, że tutorial nie nadąża za 1-3.)

14

(3 odpowiedzi, napisanych Ogólne)

isset napisał/a:

Mam takie oto query:

SELECT (
(
ROUND( (
SUM( t1.rate ) / COUNT( t1.id ) ) , 2
)
) * COUNT( t1.id )
) AS ocenaKoncowa, ROUND( (
SUM( t1.rate ) / COUNT( t1.id ) ) , 2
) AS ocenaPostow, COUNT( t1.id ) AS ilePostow, t1.user_id, t2.username AS user

To wrzucasz jako "fields"

WHERE t1.user_id = t2.id
AND t2.id !=2
AND t2.id !=30
AND t2.id !=109
AND t2.id !=33
AND t1.created >= DATE_SUB( CURDATE( ) , INTERVAL 1 week ) 

to jako "conditions"

GROUP BY t1.user_id
ORDER BY ocenaKoncowa DESC 
LIMIT 0 , 10

a to jako "group", "order" i "limit"

Czyli z grubsza będzie to wyglądało tak:

$this->Post->find(
   "all",
   array(
     "fields" => array(
        "ROUND( (
             SUM( Post.rate ) / COUNT( Post.id ) ) , 2
          )) * COUNT( Post.id )",
        "ROUND(...)"
      )
     "conditions"=>array(
       //Twoje warunki
     )
     "group" => "...",
     "order" => "...",
     "limit" => "..."
   )
);

15

(2 odpowiedzi, napisanych Wtyczki (Pluginy))

jak jest dobry, to wrzuć jak człowiek na bakery. Na tym hostingu nie mogłem się doczekać na załadowanie strony hmm

Cześć wszystkim, pewnie trochę mnie znacie - czasem odezwę się na forum. Wrzuciłem swój pierwszy dłuższy poradnik/tutorial (do tej pory głównie krótsze teksty) jak zrobić taki dashboard web 2.0 jak tutaj: http://cakephp.grzegorzpawlik.com/tutorial1/, będę wdzięczny za jakiś feedback od ludzi, którzy w cake'u siedzą.
Tekst jest dostępny tutaj: http://blog.grzegorzpawlik.com/2010/02/ … a_leniwyc/

Dzięki!

17

(6 odpowiedzi, napisanych Wasze projekty)

Robal, z skąd jesteś? Jak z Krakowa, to napisz do mnie. W firmie, w której pracuję robimy coś podobnego (z dofinansowaniem UE - blee). Jak szukasz roboty, to odezwij się proszę (nie mogę osobiście Cię przyjąć, ale mogę podszepnąć coś szefom).

czasem warto pokombinować i zamiast
./cake bake
użyć
php cake bake
albo
cake.bat bake (pod windą)
albo
php cake.php bake
Moje doświadczenia są takie,  że któryś w końcu daje radę wink

19

(1 odpowiedzi, napisanych Ogólne)

Jeśli tabela pośrednia nie będzie zawierać dodatkowych informacji, to nazywasz ją products_sizes, a w modelaach:
class Product extends AppModel{
var $hasAndBelongsToMany = array("Size");
}
(dla modelu Size: array("Product"))
I Tyle. Nie musisz robić modelu dla tabeli pośredniej.

Jeśli potrzebujesz dane w tabeli pośredniej (np. ilość sztuk produktu w danym rozmiarze), to tworzysz model
ProductsSize, a w pozostałych dwóch modelach:
var $hasAndBelongsToMany = array("Size" =>
  array(
   "className" => "Size",
   "with" => "ProductsSize"
  )
);
}
dzięki "with" cake będzie wiedział, że dodatkowo ma wyciągnąć dane z tabeli pośredniej. Dla modelu ProductsSize możesz też zdefiniować relacje jeśli potrzebujesz smile

Jeśli nie trzymasz się konwencji cake'a to będziesz musiał definiować w relacjach "joinTable", "foreignKey", "associationForeignKey" -> ogólnie więcej roboty...

20

(4 odpowiedzi, napisanych Model-Widok-Kontroler)

A możesz napisać co ta Twoja metoda robi? Może można poprawić projekt, żeby inaczej ugryźć Twój problem? Ja nigdy nie spotkałem się z taką potrzebą, o której Ty piszesz....

21

(4 odpowiedzi, napisanych Model-Widok-Kontroler)

Jeśli dobrze zrozumiałem to co napisałeś - to nie jest możliwym zrobić to w taki sposób. Domyślam się, że Twoja metoda w modelu robi jakieś query, prawdopodobnie zainteresuje Cię to: http://book.cakephp.org/view/249/Custom … Pagination

22

(8 odpowiedzi, napisanych Ogólne)

jeśli 1.2 spróbuj ClassRegistry::init()

23

(1 odpowiedzi, napisanych Ogólne)

w core.php ustaw debug na mniej niż 2

dodaj pole Category.post_count w bazie, i w relacji użyj pola couterCache:
http://book.cakephp.org/view/816/counte … your-count

25

(1 odpowiedzi, napisanych Wtyczki (Pluginy))

Plugin: Forum

class Post extends ForumAppModel {\
...
var $belongsTo = array("Forum.Topic");
}