2017-04-17 59 views
0

我正在開發一個Web應用程序,我想爲3個實體(學生,老師,學校)創建3個角色。如何用3個實體創建3個角色?

當用戶點擊題字他被重定向到第一步時,他可以在3個選項(3個收音機框)學生,老師或學校之間進行選擇,確認後他被重定向到包含具有不同輸入的表單的另一個頁面取決於第一步。

如何用Symfony 3做到這一點?我可以用ForUserBundle這麼做嗎?

回答

0

在第一步中的控制器決定重定向到哪裏基於無線設備值:

$form->handleRequest($request); 
if ($form->isSubmitted() && $form->isValid()) { 
    if(studentRadio is selected){ 
     $this->render("student.html.twig") 
    } else if (...) { 
     ... 
    } 
    .... 
} 

FOSUserBundle可以很容易地添加角色,因爲BaseUser類必須添加角色的方法:$用戶> addRole( 「ROLE_STUDENT」);

角色名必須以ROLE_開始,必須全部大寫,你可以創建你想要的

編輯:

角色是被你的用戶中存儲在$角色字段中只是字符串值類,然後你可以要求一定的作用來訪問security.yml文件中的某些網頁,當你想存取權限,需要一個角色的頁面,symfony會檢查該字段,看看用戶是否具有所需的角色

你可以創建三個班:學生,老師和學校,並且每個班都有一個名爲$ acco的字段unt就是來自FOSUserBundle的默認User類,並將它們與@ORM \ OneToOne關聯關聯,並在這3個類的FormType中添加AccountType,這種方式在數據庫中每個類都有一個表,並且這些類的每個對象都鏈接到一個帳戶和所有帳戶存儲在一個表中

在第一步中,讓用戶選擇一個角色,然後網站根據他選擇的學生註冊,教師註冊或學校註冊,在其控制器中指示他忘記使用 - > addRole(「你的角色」),例如:$ student-> getAccount-> addRole(「ROLE_STUDENT」);

我有一個項目,我工作的地方,我有一個人實體與帳戶實體(這是默認的FOSUserBundle用戶類),註冊是由PersonType完成,而不是通過AccountType,因爲我不能添加角色我希望默認FOSUserBundle的報名表提交後(我不想修改FOSUserBundle的控制器,處理登記爲簡單起見)

退房這個問題,我問的是談論它:Symfony fosuserbundle add Account entity to a person entity

協會解釋這裏:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

角色在這裏解釋:http://symfony.com/doc/current/security.html

+0

嗨paris93,謝謝你的這個答案,我只是瓦納問我怎樣才能配置FosUserBundle與依賴於3個實體3個角色,我已經與這個包的工作與默認創建的中庸之道一個實體(用戶)。現在什麼是我創建3個實體的完美方法,並且在我將這個實體配置爲FosUserBundle後?或者我首先從FosUserBunle創建這個邏輯? –

+1

我編輯我的答案回答你的問題,我希望它能幫助,我希望如果它可以幫助你會投我我是信譽有點低,你可以看到:( – paris93

+0

嗨@ paris93,我想探微詢問有關AccountType如果你手動創建這個文件,或者我們不需要在AppBundle \ Form中創建它,並且在SchoolType中添加下面這一行: - > add('account',AccountType :: class)我必須添加使用ACCOUNTTYPE的?我怎麼才能在註冊頁面獲取密碼輸入? –

0

您可以使用School,Teacher,Student擴展FOS User類。然後,您可以將用戶選擇存儲在會話中,並最終根據您通過這些步驟獲得的數據構建適當的用戶。但是,如果需要,您可以使用一些聰明的前端魔術或基於數據返回新表單的ajax調用,在同一頁面上完成所有這些單獨步驟。如果你問我,越簡單越好。例如,您可以在角色選擇上創建一個對象,並在接下來的每一步中對其進行更新。

+0

馬爾科喜的情況,謝謝你的這個答案,我只是瓦納問我怎樣才能配置FosUserBundle與依賴於3個實體3個角色,我已經一起工作這個包與合理的一個實體(用戶)默認創建。現在什麼是我創建3個實體的完美方法,並且在我將這個實體配置爲FosUserBundle後?或者我先從FosUserBunle創建這個logique?我該怎麼做? –

+0

角色以數組的形式出現,因爲這爲您的應用程序提供了很大的靈活性,角色可以是任何類似於將論壇上的簽名顯示在某些高級別privilages上的簡單權限,您所尋找的內容不會取代ROLE_USER而是增加一個角色。角色用戶只是告訴你某人已經註冊,所有其他人都可以通過其他角色處理權限和權限。你可以看到如何添加一個角色[這裏](http://stackoverflow.com/questions/20659377/assign-a-role-with-fosuserbundle),但簡短的版本是例如:'$ user-> addRole(「 ROLE_ADMIN「);' –