2016-08-08 9 views
1

私はページにサインアップするための訪問者用の拡張機能を作成しています。
サインアップするとき、無効になっているバックエンドにFEユーザーを作成する必要があります(管理者が手動で有効にします)。したがって、FEユーザーを作成するときにdisableフィールドを1に設定する必要があります。TYPO3:拡張コントローラーにカスタムセット機能を追加する

これは私のコントローラ内部の機能である:

/** 
* action create 
* 
* @param \Vendor\FeReg\Domain\Model\Dummy $newDummy 
* @return void 
*/ 
public function createAction(\Vendor\FeReg\Domain\Model\Dummy $newDummy) 
{ 
    // vars 
    $title = $newDummy->getTitle(); 
    $atitle = $newDummy->getAtitle(); 
    $fname = $newDummy->getFname(); 
    $lname = $newDummy->getLname(); 
    $street = $newDummy->getStreet(); 
    $city = $newDummy->getCity(); 
    $post = $newDummy->getPost(); 
    $phone = $newDummy->getPhone(); 
    $fax = $newDummy->getFax(); 
    $email = $newDummy->getEmail(); 
    $org = $newDummy->getOrg(); 
    $cat = $newDummy->getCat(); 
    $field = $newDummy->getField(); 
    $uname = $newDummy->getUname(); 
    $ppass = $newDummy->getPpass(); 
    $cpass = $newDummy->getCpass(); 
    $fulltitle = ($atitle ? $title." ".$atitle : $title); 


    $frontendUser = new FrontendUser(); 

    $frontendUser->setUsername($uname); 
    $frontendUser->setPassword($ppass); 
    $frontendUser->setFirstname($fname); 
    $frontendUser->setLastname($lname); 
    $frontendUser->setAddress($street); 
    $frontendUser->setTelephone($phone); 
    $frontendUser->setFax($fax); 
    $frontendUser->setEmail($email); 
    $frontendUser->setTitle($fulltitle); 
    $frontendUser->setZip($post); 
    $frontendUser->setCity($city); 
    $frontendUser->setCompany($org); 

    $this->frontendUserRepository->add($frontendUser); 

    // $this->dummyRepository->add($newDummy); 
    // $this->addFlashMessage($title, '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR); 

    $this->redirect('new'); 
} 

私も$frontendUserRepositoryをロードしています。この作品を作るために。
私は$frontendUser->setDisable(1)のようなものが必要です。

環境:TYPO3 7.6.8/PHP 5.6.24/5.0.11 mysqlnd

+1

本当の答えのための時間がない、これだけのコメント:を継承する独自の 'FrontendUser'オブジェクトを構築extbaseのもの。 gettersとsetterを使用して、フィールドに「無効」(またはTCAまたはDBをチェックします)を追加します。次に、それをTypoScript設定のサブクラスとして登録します。その後、通常のFEユーザーオブジェクトを使用するのと同じように使用する必要があります。インターネットにはこれを行う方法の例があります。 – Jost

+0

FEユーザを非表示にするか、または削除するか、無効にすることはできません。 FEユーザーのモデルを見てください。 –

+0

@ rob-ot私はあなたが私の目の前にチェックボックスを持っているので、それらを無効にすることもできると確信しています。また、テーブルには、tinyint(4)で 'disable'という列があります。 – Norman

答えて

5

ユーザーは、標準のユーザオブジェクト上で有効にデフォルトではない無効。 TYPO3からFrontendUserを拡張し、プロパティを無効にするモデルを作成することで、この問題を自分で解決しました。

class FrontendUser extends \TYPO3\CMS\Extbase\Domain\Model\FrontendUser { 
    /** 
    * @var boolean 
    */ 
    protected $disable; 

    /** 
    * Gets the Disable 
    * 
    * @return boolean 
    */ 
    public function getDisable() { 
     return (bool)$this->disable; 
    } 

    /** 
    * Sets the Disable 
    * 
    * @param boolean $disable 
    * @return void 
    */ 
    public function setDisable($disable) { 
     $this->disable = (bool)$disable; 
    } 
} 

あなたは、新たに使用することができます

config.tx_extbase { 
    persistence{ 
     classes { 
      VendorName\ExtensionName\Domain\Model\FrontendUser { 
       mapping { 
        tableName = fe_users 
        columns { 
         disable.mapOnProperty = disable 
        } 
       } 
      } 
     } 
    } 
} 

あなたは、この後にも

/** 
* A Frontend User repository 
*/ 
class FrontendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository { 
} 

FrontendUserRepositoryをする必要があります適切なプロパティにマップするためのTypoScriptのビットを必要とする場合がありますFrontendUserのモデルとしてFrontendUserモデルを作成し、それを挿入して喜んで使用します。

$userModel->setDisable(1); 
// and 
$userModel->getDisable(); 

(すべての名前空間が完全に書かれている、これは明らかに必要ではないが、単に読みやすくするために行われる)

+0

コードの各ブロックに1から4の番号が付いているとします。どのブロックを自分の内線のファイルに挿入する必要がありますか?私はこれを持って、何とかうまくいけません:1 - モデル/ Dummy.php/2 - setup.ts/3 - DummyRepository.php/4 - DummyController.php – Norman

+0

それは正しいようです。私が考えることができるのは、正しく読み込まれていないtyposcriptです。マッピングが正しくロードされている場合は、typoscriptオブジェクトブラウザを確認してください。それ以外の場合は、私たちの拡張コードを完全に表示します。ネームスペースのタイプミスのような単純なものかもしれません –

+0

ノーマンを働かせてもらえますか?それともコードにはまだ問題がありますか? –

関連する問題