FileBehavior w CakePHP
W nowej wersji 1.2 frameworka CakePHP pojawiło się kilka nowych mechanizmów. Wśród nich zachowania modelów – behaviory. Umożliwiają one przypisanie np. polu tekstowemu nowych właściwości. Pierwszym behaviorem z jakim miałem do czynienia był Image Behavior, który znalazłem na Bakery.
Umożliwia on po odebraniu pliku graficznego z formularza obsługę zapisu według schematu: img/[Model]/[id]/[field_name].jpg. Opcjonalnie można podać rozmiary miniaturek. Zostaną one również wygenerowane w postaci [field_name]_[thumb_name].jpg.
Bardzo przydatne funkcje, ale jednak zazwyczaj przesyłamy zwykłe pliki, np. PDFy. Stąd powstał pomysł na zmianę tego behaviora w taki sposób by umożliwiał przesłanie dowolnego pliku.
Gotowy File Behavior można pobrać stąd:http://www.reboo.pl/files/download/file_behavior.zip
Jego użycie jest niezwykle proste. Wystarczy w tabeli stworzyć pole VARCHAR(255) o nazwie np. document. Następnie w modelu używającym tą tabelę dopisać zmienną $actsAs i wypełnić następującą tablicą:
var $actsAs = array(
'File'=>array(
'fields'=>array(
'picture'=>array(
'types'=>array('jpg')
)
)
)
);
Klucz “document” jest właśnie nazwą pola. Dodatkowa tablica “types” jest opcjonalna i może zawierać listę dopuszczanych rozszerzeń dla uploadowanych plików.
Tworząc formularz należy pamiętać jedynie o dwóch dość oczywistych zmianach:
- tag form musi mieć ustawiony atrybut enctype na multipart/form-data
- tag input musi być typu file
Plik zapisywany jest podobnie jak w Image Behaviorze tzn.: files/[Model]/[id]/[field_name].[extension]
Dodatkowo po pobraniu danych w modelu pod kluczem z nazwą tego pola dostępna jest tablica asocjacyjna z dwoma kluczami:
- path zawiera ścieżkę do pliku
- type to typ pliku


Facebook
GoldenLine
LinkedIn