diokhan Posted March 23, 2012 at 11:53 AM Report #445310 Posted March 23, 2012 at 11:53 AM Boas, Eu agora ando a fazer uma parte do meu site que é a introdução de novos utilizadores. Cada utilizador tem um tipo de acesso, sendo possível obter mais do que um, por exemplo o meu utilizador pode ser "ROLE_USER" e "ROLE_ADMIN". Logo tenho uma relação M:M. Numa tabela já tenho todos os acessos possíveis, e ao criar um novo utilizador consigo escolher quais os acessos a atribuir ao utilizador. O meu problema é, ao gravar na base de dados, não estou a saber introduzir, o utilizador é introduzido, mas não criar a relação com o tipo de acesso. Já tive a procurar no google e a ler alguns tutoriais, mas não consegui colocar a funcionar. Neste momento tenho o código assim: public function newUserAction(Request $request){ // create new user and insert to database $user = new Users(); $user->setName(''); $user->setPosition(''); $user->setUsername(''); $user->setEmail(''); $user->setPassword(''); $form = $this->createForm(new UserType, $user); if ($request->getMethod() == 'POST') { $form->bindRequest($request); $factory = $this->container->get('security.encoder_factory'); $encoder = $factory->getEncoder($user); $pwd = $encoder->encodePassword($user->getPassword(), $user->getSalt()); $user->setPassword($pwd); if ($form->isValid()) { // perform some action, such as saving the task to the database $em = $this->getDoctrine()->getEntityManager(); $em->persist($user); $em->flush(); return $this->redirect($this->generateUrl('user_success')); } } return $this->render('AcmePorGeneBundle:User:newUser.html.twig', array( 'form' => $form->createView(), )); } Assim fica apenas a introduzir o utilizador, alguém pode ajudar e dar umas orientação do que preciso fazer para obter o resultado pretendido? ? ...Join the dark side...and get a free cookie...
diokhan Posted March 23, 2012 at 04:08 PM Author Report #445344 Posted March 23, 2012 at 04:08 PM Quanto a este problema já consegui resolver, foi esta a minha soluçao: Ao criar a form: public function buildForm(FormBuilder $builder, array $options){ $builder->add('name', 'text', array('required' => true, 'label' => 'Name: ')); $builder->add('position', 'text', array('required' => true, 'label' => 'Position: ')); $builder->add('username', 'text', array('required' => true, 'label' => 'Username: ')); $builder->add('email', 'text', array('required' => true, 'label' => 'E-Mail: ')); $builder->add('password', 'password', array('required' => true, 'label' => 'Password: ')); $builder->add('idAccessLevel', 'entity', array( 'class' => 'Acme\TestBundle\Entity\AccessLevel', 'property' => 'permissions', 'multiple' => true, 'label' => 'Access:' )); } ao inserir na base de dados: $access = new \Acme\TestBundle\Entity\AccessLevel(); ... for ($i = 0; $i < count($_POST['username']['idAccessLevel']); $i++){ $em = $this->getDoctrine()->getEntityManager(); $entity = $em->getRepository('AcmeTestBundle:AccessLevel')->find($_POST['username']['idAccessLevel'][$i]); $user->addAccessLevel($entity); } Ficou a funcionar, o único porem, que ainda não consegui resolver, é ao editar um utilizador, adicionar e retirar os tipos de acesso da-me erro, diz "Integrity constraint violation: 1062 Duplicate entry '1-5' for key 'PRIMARY'". Pensei em duas soluções: 1) apagar as relações quando edito e voltar a criar; 2) verificar as relações existentes e comparar com as novas, retirar as que já não existem nas novas e adicionar as que faltam. Mas ainda não consegui aplicar nenhuma destas soluções. Se alguém puder ajudar e orientar-me no caminho certo eu agradeço 😉 ...Join the dark side...and get a free cookie...
diokhan Posted March 26, 2012 at 03:45 PM Author Report #445738 Posted March 26, 2012 at 03:45 PM Boas, Alguém sabe como posso fazer isto? Já ando desde as 9h da manha e ainda não consegui, já tentei "apagar" as relações existentes e ao fazer o update criar as novas relações, mas não alterou nada. Basicamente o que tenho é uma tabela "ACCESS_LEVEL" que contem [EDIT, DELETE, CREATE, etc], uma tabela com os "USERS", e uma tabela relacional que contem o ID_ACCESS_LEVEL e o ID_USER. Ao criar um novo user eu atribuo alguns acessos, mas depois queria poder editar e retirar alguns acessos e inserir novos. Para inserir os novos acessos consegui fazer, a parte que não estou a ter sucesso, é a parte de retirar alguns acessos. Por exemplo, o meu user tem acesso de "CREATE" e "DELETE", mas quero que tenha apenas de "CREATE", mas não estou a conseguir realizar esta parte. Alguém sabe como posso fazer isto? Desde já obrigado a quem souber ajudar-me 😄 ...Join the dark side...and get a free cookie...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now