Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [symfony] sortowanie w backendzie
Forum PHP.pl > Forum > PHP > Frameworki
Virti
Witam wszystkich,
mam następujący problem z Symfony 1.3. Piszę sobie jakiś tam backend i mam 3 moduły: User, Group i Permission (Group ze względu na ograniczenia propela ma inną nazwę w rzeczywistości, ale nie o to w sumie chodzi). Mój problem polega na tym, że gdy próbuję w Group lub Permission posortować wyniki zapytania (klikając na nagłówek kolumny, np. "Name", "Id") dostaję fatal errora:
Kod
Fatal error: Cannot redeclare class BasePermissionPeer in C:\wamp\www\kivi2\lib\model\om\BasePermissionPeer.php on line 14


Dodam, że w module user wszystko śmiga bardzo dobrze. Po wyczyszczeniu cache błąd znika, sortowanie nie (czyli sortuje tak jak chciałem, a co popsuł fatal error). Niestety po ponownej próbie sortowania error się powtarza, po odświeżeniu zresztą też. Wszystkie moduły mają zmienione pliki szablonów (indexSuccess.php).

Oto plik schema:
Kod
propel:
  user:
    id: ~
    name:     { type: varchar, size: 32 }
    surname:     { type: varchar, size: 32 }

    username: { type: varchar, size: 32, required: true, index: unique }
    password: { type: varchar, size: 40, required: true }
    salt:     { type: varchar, size: 32, required: true }

    website:  { type: varchar, size: 128, required: true }
    email:    { type: varchar, size: 128, required: true }
    show_email: { type: boolean, required: true, default: 1 }

    is_active:  { type: boolean, required: true, default: 1 }
    is_super_admin: { type: boolean, required: true, default: 0 }

    created_at: ~
    last_login: { type: timestamp }

  permission:
    id: ~
    name:   { type: varchar, size: 64, required: true, index: unique }
    description: { type: longvarchar }
    
  ugroup:
    id: ~
    name:   { type: varchar, size: 64, required: true, index: unique }
    description: { type: longvarchar }

  user_permission:
    user_id: { type: integer, primaryKey: true, required: true, foreignTable: user, foreignReference: id, onDelete: cascade }
    permission_id: { type: integer, primaryKey: true, required: true, foreignTable: permission, foreignReference: id, onDelete: cascade }

  user_group:
    user_id: { type: integer, primaryKey: true, required: true, foreignTable: user, foreignReference: id, onDelete: cascade }
    group_id: { type: integer, primaryKey: true, required: true, foreignTable: ugroup, foreignReference: id, onDelete: cascade }

  group_permission:
    group_id: { type: integer, primaryKey: true, required: true, foreignTable: ugroup, foreignReference: id, onDelete: cascade }
    permission_id: { type: integer, primaryKey: true, required: true, foreignTable: permission, foreignReference: id, onDelete: cascade }

  user_remember_key:
    user_id: { type: integer, primaryKey: true, required: true, foreignTable: user, foreignReference: id, onDelete: cascade }
    remember_key: { type: varchar, size: 32, index: unique }
    ip_address: { type: varchar, size: 50, primaryKey: true }
    created_at: ~


Nie ukrywam, że schema mocno inspirowany sfGuardPlugin, ale to również nie o to chodzi;)

Czy wie ktoś o co może chodzić? Proszę o pomoc.

Pozdrawiam;)
dr4ko
A jak wygląda ta 14 linijka w BasePermissionPeer?
Virti
  1. abstract class BasePermissionPeer {


Dodam, że błąd ten występuje również dla modułu "ugroup", jednak nie dotyczy modułu user...

EDIT: metodą prób i błędów wytropiłem, że metodą powodującą ów błąd jest:
  1. protected function isValidSortColumn($column)
z clasy autoPermissionActions (wygenerowane do cache), idąc dalej jest to:
  1. BasePeer::getFieldnames


Zawartość funkcji autoPermissionActions::isValudSortColumn:
  1.  
  2. protected function isValidSortColumn($column)
  3. {
  4. return in_array($column, BasePeer::getFieldnames('permission', BasePeer::TYPE_FIELDNAME));
  5. }


Po podmienieniu tej f-cji na:
  1. protected function isValidSortColumn($column)
  2. {
  3. //return in_array($column, BasePeer::getFieldnames('permission', BasePeer::TYPE_FIELDNAME));
  4. return true;
  5. }


wszystko chodzi, jednak jest to obejście problemu, z którego szczerze mówiąc nie jestem zadowolony.

Na koniec jeszcze zawartość BasePeer::getFieldnames:
  1. static public function getFieldnames ($classname, $type = self::TYPE_PHPNAME) {
  2.  
  3. // TODO we should take care of including the peer class here
  4.  
  5. $peerclass = 'Base' . $classname . 'Peer'; // TODO is this always true?
  6. $callable = array($peerclass, 'getFieldnames');
  7. $args = array($type);
  8.  
  9. return call_user_func_array($callable, $args);
  10. }


Dodam, że dla działającego modułu User, funkcja autoUserActions::isValidSortColumn wygląda identycznie (zmienia się jedynie permission na user), jednak ona nie powoduje już błędów.
dr4ko
Hmm, wszystko wygląda ok w kodzie więc zgaduję, że gdzieś w projekcie istnieje drugi plik BasePermisssionPeer.php. Nie kopiowałeś czasem modelu do innego katalogu? I dla formalności się zapytam: czy robiłeś clear cache? winksmiley.jpg
Virti
Modelu nie kopiowałem, cc oczywiście było robione; Dla nowo utworzonych modułów problem również występuje (user jest jakiś wyjątkowy?winksmiley.jpg).

Pozdrawiam winksmiley.jpg

Edit: BasePermissionPeer.php istnieje tylko jeden, wygląda na to, że zostaje dwukrotnie zaincludowany przez autoloader (poprzez wywołanie f-cji call_user_func_array()winksmiley.jpg, dlaczego jednak:
1. Autoloader ładuje po raz drugi jeden plik?
2. Sytuacja nie dotyczy modułu User?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.