Aplikacje internetowe

Bełdziowe spojrzenie na aplikacje internetowe

Formo – moduł formularzy – modyfikacje II

W poprzedniej notce opisałem kilka modyfikacji mających na celu zwiększenie wygody korzystania z modułu Formo. W dzisiejszej będę kontynuował temat zamieszczając kolejną porcję pomocnych modyfikacji koncentrując się na kontrolce uploadu.

Uwzględnianie domyślnego katalogu uploadu

Domyślnym miejscem uploadu plików w Kohanie jest katalog upload zlokalizowany w głównym katalogu frameworka. Z bliżej nieokreślonych przyczyn Formo nie uwzględnia go podczas zapisuj przesłanego pliku, korzystając domyślnie z katalogu uploads. Pierwszym krokiem do zmiany tego jest usunięcie nazwy domyślnego katalogu Formo. Aby tego dokonać należy zmodyfikować plik formo_drivers_core/file.php zamieniając 5 linie z

public $upload_path = 'uploads';

na

public $upload_path = '';

Drugim krokiem jest dodanie uwzględniania kohanowej lokalizacji katalogu. Możemy to osiągnąć zamieniając 84 linie z

$full_path = upload::save($fname, $time.$file['name'], 
                          DOCROOT.$this->upload_path, 0777);

na

$full_path = upload :: save( $fname, $time . $file[ 'name' ], 
                             Kohana :: config( 'upload.directory' ) . '/' . 
                             $this -> upload_path, 0777 );

Zmiana sposobu generowania nazwy plików

Podczas zapisuj pliku Formo dodaje do jego nazwy aktualny znacznik czasu wykorzystując do tego funkcję time, dzięki czemu unikami nadpisywania plików posiadających taką samą nazwę. W chwili gdy umożliwiamy wgranie kilku plików jednocześnie może wystąpić sytuacja, że wgrywane pliki będą nazywały się tak samo, przez co nadpiszą się wzajemnie. Aby tego uniknąć należy zamienić

$time = time();

znajdujący się w 53 linii na

$time = microtime( );

Poprawa nazwy komunikatu błędu

W pliku z komunikatami Formo można znaleźć klucz invalid_file informujący o wybraniu niepoprawnego pliku. W 75 linii wdarła się literówka, przez którą komunikat błędu wyszukiwany jest po kluczu invalidfile. Należy więc zmienić nazwę klucza w pliku językowym, albo 75 linię kontrolki file na

return $this -> error = Kohana :: lang( 'formo.invalid_file' );

Zwracanie nazwy wgranego pliku

Korzystając z pluginu ORM do automatycznego zapisywania danych z formularzy do bazy danych nie możemy użyć kontrolki file. Dzieje się tak dlatego, że metoda get_value służąca do pobierania wartości pola formularza zamiast nazwy pliku zwraca tablicę z informacjami o nim. Aby umożliwić bezproblemową współpracę kontrolki file z pluginem ORM należy zmienić wspomnianą metodę na

public function get_value()
{
   return $this -> data[ 'file_name' ];
}

Dodatkowo, aby nie utracić poprzedniej funkcjonalności metody możemy dodać kolejną, która umożliwi pobranie informacji o pliku.

public function get_data( )
{
   return $this -> data;
}

Zapobieganie podwójnej walidacji

Powyższy kod może spowodować pewien problem. Metoda sprawdzająca poprawność przesłanego pliku będzie wykonywana dwa razy, co spowoduje zwróceniem błędu informującego o niepoprawności przesłanego pliku podczas drugiego wywołania metody. Zapobiegnięciem tego problemu jest dodanie na początku metody validate_this następującego kodu:

if( $this -> was_validated )
   return;

Zmiana standardowego komunikatu błędu na komunikat z pliku i18n

W chwili gdy kontrolka oznaczona jako wymagana nie zostanie wypełniona ukaże się nam komunikat Required pomimo że w pliku językowym zdefiniowaliśmy inną wiadomość. Aby wymusić korzystanie z lokalizowanych komunikatów należy zamienić kod z linii 339 pliku Formo_Element.php

$this->error = $this->required_msg;

na

$this->error = Kohana :: lang( 'formo.required_msg' );

Zobacz także:


Tagi: , , ,
Kategoria: Kohana, Kohana, Moduły


1 komentarz

  1. Zapobieganie podwójnej walidacji bardzo mi się przydało :)
    microtime też było jak znalazł, bo w obecnym projekcie chcę przesłać kilka plików naraz :)

Dodaj komentarz