2012-08-04 24 views
7

Bir fikstürden yeni bir Kullanıcı Yöneticisi oluşturmaya çalışıyorum. FOSUserBundle ve Symfony2 kullanıyorum.Verifixtures ve fosuserbundle kullanarak yönetici kullanıcı oluşturma

[ErrorException]           
Notice: Undefined property:  
INCES\ComedorBundle\DataFixtures\ORM\LoadUserAdminData::$container in 
/public_html/Symfony/src/INCES/ComedorBundle/DataFixtures/ORM/LoadUserAdminData.php line 16 
+0

Neden fos kullanmıyorsunuz: kullanıcı: tanıtın? –

+0

Uygulamamı üretim sunucusunda ilk kez çalıştırdığımda yönetici kullanıcısı oluşturmak istiyorum. Eğer iyi tanımış olsaydım, zaten yaratılmış bir kullanıcının rolünü değiştirmeye çalışırdım ama tam olarak ne istediğimi değil. –

cevap

25

:

// Change the namespace! 
namespace Acme\DemoBundle\DataFixtures\ORM; 

use Doctrine\Common\DataFixtures\FixtureInterface; 
use Doctrine\Common\Persistence\ObjectManager; 
use Symfony\Component\DependencyInjection\ContainerAwareInterface; 
use Symfony\Component\DependencyInjection\ContainerInterface; 

class LoadUserData implements FixtureInterface, ContainerAwareInterface 
{ 
    //.. $container declaration & setter 

    public function load(ObjectManager $manager) 
    { 
     // Get our userManager, you must implement `ContainerAwareInterface` 
     $userManager = $this->container->get('fos_user.user_manager'); 

     // Create our user and set details 
     $user = $userManager->createUser(); 
     $user->setUsername('username'); 
     $user->setEmail('[email protected]'); 
     $user->setPlainPassword('password'); 
     //$user->setPassword('3NCRYPT3D-V3R51ON'); 
     $user->setEnabled(true); 
     $user->setRoles(array('ROLE_ADMIN')); 

     // Update the user 
     $userManager->updateUser($user, true); 
    } 
} 

Umut bu kimse yardımcı olur! :)

+0

Çalışmasını benim için de çok güzel :) Tnx. https://github.com/FriendsOfSymfony/FOSUserBundle/blob/master/Resources/doc/user_manager.md - Birisi farklı bir şey yapmak isterse, userManager dokümantasyonu budur :) – Petroff

+0

İyi çalışıyor. Paylaşım için teşekkürler. +1 – BentCoder

3

belgelerin this bölümlerini izleyin:

$userManager = $this->container->get('fos_user.user_manager'); 

//$userAdmin = $userManager->createUser(); 

$userAdmin = new UserAdmin(); 
$userAdmin->setUsername('francis'); 
$userAdmin->setEmail('[email protected]'); 
$userAdmin->setEnabled(true); 
$userAdmin->setRoles(array('ROLE_ADMIN')); 

$userManager->updateUser($userAdmin, true); 

Her zaman bu hatayı alıyorum.

+0

En iyi cevap. Teşekkür ederim. –

2

Hata, $ kapsayıcısının şu anda tanımsız olduğu içindir. Bunu düzeltmek için, sınıf tanımınıza ContainerAwareInterface ekleyin.

class LoadUserData implements FixtureInterface, ContainerAwareInterface 
{ 
    ... 
} 

Bu, UserManager olmadan kullanıcı oluşturduğunuzdan, tam olarak istediğiniz şeyi almaz. Bunun yerine yorumladığınız satırı kullanmalısınız.

Bana öyle geliyor ki, UserAdmin sınıfına ihtiyacınız yok. Yönetici kullanıcılar, Kullanıcı'nın yalnızca sahip oldukları rollerle ayırt edilen bir alt kümesi olmalıdır.

UserManager'ı bir Kullanıcı (UserAdmin değil) oluşturmak ve rolleri ayarlamak için kullanmalısınız. Tüm yönetici kullanıcılarının bir dizini saklamanız gerekirse, bir MySQL VIEW bunu gerçekleştirebilir veya kendi "önbellek" tablonuzu oluşturabilir ve gerektiğinde güncellemek için Doktrin Dinleyicilerini kullanabilirsiniz.

Bu soru oldukça eskidir, bu yüzden cevabı veya en azından bir geçici çözümü bulduğunuzu tahmin ediyorum. Bunu sağlar mısınız lütfen? Kendi sorularınızı cevaplamak sorun değil. Bu, (i de FOSUserBundle kullanıyorum) benim için çalıştı

İlgili konular