Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: Modyfikacja symfony - ułatwienie dla developera

Może nie dla każdego, ale mnie się przydaje, więc postanowiłem napisać.

1. Zmiana nazw kontrolerów
Domyślnie kontrolery nazywają się wszystkie tak samo actions.class.php, co utrudnia ich odnalezienie w edytorze. Zmiana dodaje nazwę kontrolera do nazwy pliku, czyli np. plik nazywa się mainActions.class.php. Jeśli taki plik nie zostanie znaleziony, to będzie użyty domyślny plik.

W pliku \lib\vendor\symfony\lib\controller\sfController.class.php w function controllerExists odszukuję linię:
$module_file = $dir.'/'.$classFile.'s.class.php';

i zamieniam na
      $module_file = $dir.'/'.$moduleName.ucwords($classFile).'s.class.php';
if (!is_readable($module_file))
$module_file = $dir.'/'.$classFile.'s.class.php';


2. Przeniesienie plików widoków
Modyfikacje pozwalają przenieść pliki widoków oraz główny layout do /web_dir/views/application_name/, wtedy webmajster dostaje do modyfikowania tylko pliki jemu potrzebne. W/w pliki mogą istnieć również w ich standardowych lokalizacjach i stamtąd są później pobierane, gdy nie ma ich w nowej lokalizacji.
W lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php modyfikuję:
  public function getTemplateDirs($moduleName)
{
$dirs = array();
$dirs[] = sfConfig::get('sf_web_dir').'/views/'.$this->application.'/'.$moduleName;
$dirs[] = sfConfig::get('sf_app_module_dir').'/'.$moduleName.'/templates'; // application
$dirs = array_merge($dirs, $this->getPluginSubPaths('/modules/'.$moduleName.'/templates')); // plugins
$dirs[] = $this->getSymfonyLibDir().'/controller/'.$moduleName.'/templates'; // core modules
$dirs[] = sfConfig::get('sf_module_cache_dir').'/auto'.ucfirst($moduleName.'/templates'); // generated templates in cache

return $dirs;
}

W config/ProjectConfiguration.class.php do funkcji setup() dodaję:
sfConfig::add(array(
'sf_app_template_dir' => sfConfig::get('sf_web_dir') .
DIRECTORY_SEPARATOR . 'views' .
DIRECTORY_SEPARATOR . $this->application,
));

Jeśli wcześniej zmieniłem domyślny katalog dla plików publicznych, to to ustawienie powinno być osobną instrukcją PHP.

3. Zmiana katalogu dla plików publicznych
Domyślnie jest to /web. Chcę zmienić na public_html (np. na potrzeby hostingu opartego o DirectAdmin). W config/ProjectConfiguration.class.php do funkcji setup() dodaję:
$sf_root_dir = sfConfig::get('sf_root_dir');
sfConfig::add(array(
'sf_web_dir_name' => $sf_web_dir_name = 'public_html',
'sf_web_dir' => $sf_root_dir . DIRECTORY_SEPARATOR . $sf_web_dir_name,
'sf_upload_dir' => $sf_root_dir . DIRECTORY_SEPARATOR . $sf_web_dir_name .
DIRECTORY_SEPARATOR . sfConfig::get('sf_upload_dir_name'),
));

Oczywiście jest to propozycja rozwiązania tych niedogodności. I są to DLA mnie niedogodności, które innym mogą nie przeszkadzać. Możliwe również, że da się je rozwiązać inaczej, jeśli tak, to chętnie poznam inne możliwości.

Wiem, że modyfikowanie kodu core nie jest dobrym rozwiązaniem, ale takie udało mi się wypracować najszybciej.Paweł Koralewski edytował(a) ten post dnia 08.12.10 o godzinie 11:30
Łukasz Fiłyk

Łukasz Fiłyk Programista PHP

Temat: Modyfikacja symfony - ułatwienie dla developera

Bardzo miło z Twej strony, napewno komuś się przyda:)
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: Modyfikacja symfony - ułatwienie dla developera

A ja mam nadzieję, że jakiś bardziej doświadczony symfonowicz podpowie bardziej eleganckie rozwiązanie.

konto usunięte

Temat: Modyfikacja symfony - ułatwienie dla developera

3. Zmiana katalogu dla plików publicznych
Domyślnie jest to /web. Chcę zmienić na public_html (np. na potrzeby hostingu opartego o DirectAdmin). W config/ProjectConfiguration.class.php do funkcji setup() dodaję:
$sf_root_dir = sfConfig::get('sf_root_dir');
sfConfig::add(array(
'sf_web_dir_name' => $sf_web_dir_name = 'public_html',
'sf_web_dir' => $sf_root_dir . DIRECTORY_SEPARATOR . $sf_web_dir_name,
'sf_upload_dir' => $sf_root_dir . DIRECTORY_SEPARATOR . $sf_web_dir_name .
DIRECTORY_SEPARATOR . sfConfig::get('sf_upload_dir_name'),
));

Możesz to zrobić nieco prościej. W ProjectConfiguration.class.php :

$this->setWebDir( $this->getRootDir().DIRECTORY_SEPARATOR.'public_html' );
Paweł Koralewski

Paweł Koralewski architekt aplikacji,
team leader

Temat: Modyfikacja symfony - ułatwienie dla developera

Damian Kopiec:

Możesz to zrobić nieco prościej. W ProjectConfiguration.class.php :

$this->setWebDir( $this->getRootDir().DIRECTORY_SEPARATOR.'public_html' );

A na pewno jest to tożsame? U mnie jest ustawianych więcej parametrów.

konto usunięte

Temat: Modyfikacja symfony - ułatwienie dla developera

Paweł Koralewski:
Damian Kopiec:

Możesz to zrobić nieco prościej. W ProjectConfiguration.class.php :

$this->setWebDir( $this->getRootDir().DIRECTORY_SEPARATOR.'public_html' );

A na pewno jest to tożsame? U mnie jest ustawianych więcej parametrów.

Jest tożsame, w zasadzie ta metoda robi praktycznie to samo co twoja


/**
* Sets the web root directory.
*
* @param string $webDir The absolute path to the web dir.
*/
public function setWebDir($webDir)
{
sfConfig::add(array(
'sf_web_dir' => $webDir,
'sf_upload_dir' => $webDir.DIRECTORY_SEPARATOR.'uploads',
));
}


Też mam kilka stron na DirectAdmin i jak do tej pory zawsze to stosowałem.Damian Kopiec edytował(a) ten post dnia 09.12.10 o godzinie 11:28

Następna dyskusja:

Zlecenie dla programisty PH...




Wyślij zaproszenie do