Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [symfony] sortowanie w backendzie, Cannot redeclare class Base*Peer
Virti
post 1.11.2009, 10:46:03
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 12
Dołączył: 11.01.2005
Skąd: Zduńska Wola

Ostrzeżenie: (0%)
-----


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;)

Ten post edytował Virti 1.11.2009, 11:23:01
Go to the top of the page
+Quote Post
dr4ko
post 2.11.2009, 16:13:04
Post #2





Grupa: Zarejestrowani
Postów: 49
Pomógł: 4
Dołączył: 16.07.2008
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


A jak wygląda ta 14 linijka w BasePermissionPeer?


--------------------
devFactor
Go to the top of the page
+Quote Post
Virti
post 3.11.2009, 09:47:00
Post #3





Grupa: Zarejestrowani
Postów: 115
Pomógł: 12
Dołączył: 11.01.2005
Skąd: Zduńska Wola

Ostrzeżenie: (0%)
-----


  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.

Ten post edytował Virti 3.11.2009, 09:49:24
Go to the top of the page
+Quote Post
dr4ko
post 3.11.2009, 10:28:20
Post #4





Grupa: Zarejestrowani
Postów: 49
Pomógł: 4
Dołączył: 16.07.2008
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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


--------------------
devFactor
Go to the top of the page
+Quote Post
Virti
post 3.11.2009, 10:30:32
Post #5





Grupa: Zarejestrowani
Postów: 115
Pomógł: 12
Dołączył: 11.01.2005
Skąd: Zduńska Wola

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Virti 3.11.2009, 10:34:12
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 16:09