Część pierwsza
Część druga
a jak już przebrniesz to używaj tego
ACL Extras
do synchronizacji bazy z zawartością projektu.
Przeszukaj forum pewnie znajdziesz jakieś dodatkowe informacje.
1 2009-06-23 14:32:07
Odp: Logowanie użytkowników. (2 odpowiedzi, napisanych Uwierzytelnianie i autoryzacja)
2 2009-06-22 10:02:02
Odp: habtm (9 odpowiedzi, napisanych Ogólne)
1.
Do tabeli pośredniej orders_products dołącz dodatkową kolumnę.
Ja miałem problemy z działaniem związków HABTM po takim manewrze więc napisałem własny bahavior dla tego modelu.
Z tego co pamiętam udało mi się działać z jedną kolumną dodatkową ale przy 2 już były problemy.
albo prościej
2.
Do modelu Orders dodać hasMany Details. W modelu Details zrobić belongsTo Order. Można też dodać belongsTo Product.
W tym modelu trzymać szczegóły zamówienia tj.
order_id INT UNSIGNED NOT NULL
product_id INT UNSIGNED
ile_sztuk INT UNSIGNED
.....
itd. itp.
3 2009-06-10 11:14:45
Odp: Validation message (6 odpowiedzi, napisanych Ogólne)
Tak jeszcze trochę offtopowo ale co tam, skoro już jesteśmy w temacie error mesgów to ...
Ja miałem taki problem więc ostrzegam innych. Pamiętajcie, że funkcja read() czyści tablice z błędami walidacji.
Wtedy nie zobaczysz błędów choćbyś nawet chciał. Rozwiązanie bardzo proste: find() zamiast read().
4 2009-06-07 11:41:59
Odp: Validation message (6 odpowiedzi, napisanych Ogólne)
Maiłem ten sam problem. Jak pod polem input wyskakiwal error to chrzanił mi się wygląd formularza.
Ja chciałem error mesgs wyświetlać na górze formularza. Zrobiłem to za pomocą css i javascript.
Robiłem to na szybciora i nie chciało mi się zastanawiać ani szukać jak to zrobić w CakePHP.
Jeśli komuś nie będzie działało to od razu odpowiem standardową odpowiedzią informatyczną #3: "U mnie działa". A potem #2: "Dziwne".
Wiem, wiem kod jest brzydki, rozwiązanie głupie i wogóle JavaScript jest be i fu, a prawdziwi mężczyźni nie robią backupów itp itd.
Jeśli ktoś ma lepsze rozwiązanie tego problemu (na 200% istnieje takie) bardzo proszę o podzielenie się nim.
CSS
div.error-message {
display:none;
}
#flashBledy {
background-color: #FFCCCC;
text-align: center;
width: 40em;
margin:0;
padding-bottom:1em;
font-size:70%;
border: 1px black solid;
}JavaScript ( funkcję getElementsByClassName() wygooglujcie i dodajcie do tego samego pliku )
function bledy() {
if(document.getElementById("flashMessage")!=null) {
var elms = getElementsByClassName('error-message');
var inputy = [];
var error_msg = '';
error_msg += '<div id="flashBledy">';
for(var i=0,j=elms.length; i<j; i++) {
inputy.push(elms[i].parentNode.getElementsByTagName('input')[0]);
error_msg += '<br/><p>'+elms[i].innerHTML+'</p>';
}
for(var i=0,j=inputy.length; i<j; i++) inputy[i].style.background="#FFCCCC";
error_msg += '</div>';
document.getElementById("flashMessage").innerHTML += error_msg;
}
}Musicie umieścić plik z js w app/webroot/js , dołączyć plik z js np. w layoucie default.ctp
Pamiętajcie o dodaniu helpera JavaScript np w AppController.
default.ctp
echo $javascript->link('nazwa_pliku_bez_rozszerzenia');app_controller.php
var $helpers = array('Javascript', ...............);Na koniec dodamy wywołanie funkcji bledy() do pliku z widokiem zawierającym formularz.
Dodajcie gdzieś na końcu pliku.
widok_akcji_z_formularzem.ctp
$script = 'bledy();';
echo $javascript->codeBlock($script);5 2009-04-29 18:02:38
Odp: Kontrola poprawności drzewa (4 odpowiedzi, napisanych Uwierzytelnianie i autoryzacja)
Poprzednio wspomniany przeze mnie shell do zarządzania ACO doczekał się aktualizacji. Poprawiony shell zmienił nazwę na AclExtras Shell
Wystarczy ściągnąć acl_extras.php z githuba i wrzucic do app/vendors/shells/. Teraz z katalogu cake/console możecie uruchomić shella.
Robi się to podobnie do pieczenia ciasteczka tylko zamiast "bake" wstawiamy nazwę shella.
Funkcje nowego shella:
- dodawanie do drzewa ACO nowych kontrolerów i akcji (nie usuwa nic z drzewa ACO)
cake acl_extras aco_update
- synchronizacji ACO z bieżącym stanem kontrolerów i akcji ("czyści" drzewo ACO)
cake acl_extras aco_sync
-odzyskiwanie drzew ARO i ACO (nie sprawdzałem)
cake acl_extras recover aro lub cake acl_extras recover aco
-weryfikacja ARO i ACO (weryfikuje tylko poprawność drzewa a nie "aktualność")
cake acl_extras verify aro lub cake acl_extras verify aco
6 2009-04-02 14:01:49
Odp: bindModel z tym samym modelem (9 odpowiedzi, napisanych Model-Widok-Kontroler)
Ja bym podzielił dodatkowo użytkowników na grupy jeśli by było więcej rodzajów użytkowników niż uprzywilejowany i nieuprzywilejowany.
Tak jak tu
7 2009-04-02 11:23:43
Odp: Kontrola poprawności drzewa (4 odpowiedzi, napisanych Uwierzytelnianie i autoryzacja)
Mark Story napisał shell do zarządzania ACO.
http://mark-story.com/posts/view/genera … osyncshell
Jak poszperasz na tej stronie to znajdziesz też dobry tutorial do Auth i ACL oraz komponent, który tworzy menu na podstawie ACL.
Mam nadzieję, że pomogłem.
8 2009-04-02 11:10:24
Odp: bindModel z tym samym modelem (9 odpowiedzi, napisanych Model-Widok-Kontroler)
@robal77
Uppps.
Troszkę zbłądziłem myślami i wymyśliłem, że wielu użytkowników może pracować nad wieloma projektami a projekt może mieć jednego twórcę.
Pomyślałem, że jak będzie HABTM to wszystkich User połączonych z Project będziemy mieć w wyniku find'a w $wynik['UsersProject']. I wten sposób odpowiedziałem na pytanie, którego nikt nie zadał. Sorki.
9 2009-04-02 09:56:22
Odp: bindModel z tym samym modelem (9 odpowiedzi, napisanych Model-Widok-Kontroler)
Wygląda na hasAndBelongsToMany. Póżniej sprawdzasz tylko czy user_id == created_by i wiesz czy uzytkownik stworzył projekt.
10 2009-03-31 23:24:19
Odp: rozbudowana join table (6 odpowiedzi, napisanych Model-Widok-Kontroler)
Małe ostrzeżenie.
Kiedyś był mały problem ze związkami wiele do wielu (HABTM). Przy ręcznym dodawaniu lub usuwaniu powiązań po jednym na raz usuwane były wszystkie inne powiązania. Nie wiem czy jest to nadal aktualne. Wiem jednak, że ktoś nawet napisał behavior który pozwalał pominąć ten problem ("HABTM Add & Delete Behavior" <--- sprawdź na bakery).
@robal77
Jeśli chodzi o bindowanie w locie to z całą pewnością jest to najwydajniejsze rozwiązanie ale nieszczególnie wygodne bo bindModel() i unbindModel() działają dla jednego find()'a, a później trzeba znowu bindować lub unbindować. Ja często unbinduje modele, które przechowują jakieś dane binarne.
Bierzcie przykład z robala77 i używajcie pełnych nazw 'Model.field' w 'conditions'=>array() bo stracicie jak ja kilka godzin na szukaniu dlaczego "columns are not exclusive".