[TYPO3-mvc] Error Tx_Extbase_MVC_Exception_InvalidArgumentValue
Thomas "Thasmo" Deinhamer
thasmo at gmail.com
Thu May 6 20:32:42 CEST 2010
Did you set a storage page/pid?
Thomas
Am 06.05.2010 18:13, schrieb Lang, Patrik:
> Hello list,
>
> I have a problem when I pass an object as argument to an action for a backend module.
>
> I get the following error:
>
> The value must be of type "Tx_Xchange_Domain_Model_User", but was of type "NULL".
>
> I don't get an object, I just get the uid of the database entry
>
> Here's my scenario and shortend files:
>
> I want to extend the Model Tx_Extbase_Domain_Model_FrontendUser with four fields (example with one field "x_admin"):
>
> class Tx_Xchange_Domain_Model_User extends Tx_Extbase_Domain_Model_FrontendUser {
>
> /**
> * @var boolean
> */
> protected $xAdmin = false;
>
> /**
> * @return boolean state if user is admin
> */
> public function getXAdmin() {
> return $this->xAdmin;
> }
>
> /**
> * @param boolean $state state if user is admin
> * @return void
> */
> public function setXAdmin($state) {
> $this->xAdmin = $state;
> }
>
> }
>
> I also extended the repository:
>
> class Tx_Xchange_Domain_Repository_UserRepository extends Tx_Extbase_Domain_Repository_FrontendUserRepository {
>
> /**
> * Fetchs fe_users which are marked as employee
> *
> * @return array
> */
> public function findEmployees()
> {
> $query = $this->createQuery();
> $query->getQuerySettings()->setRespectStoragePage(false);
> return $query->matching(
> $query->logicalAnd( $query->equals('x_employee', 1),
> $query->equals('pid', XCHANGE_USERS_PID)
> )
> )->execute();
> }
> }
>
> And here's my controller:
>
> class Tx_Xchange_Controller_UserController extends Tx_Extbase_MVC_Controller_ActionController {
>
> /**
> * @var Tx_Xchange_Domain_Repository_UserRepository
> */
> protected $userRepository;
>
> /**
> * Initializes the current action
> *
> * @return void
> */
> public function initializeAction() {
> $this->userRepository = t3lib_div :: makeInstance('Tx_Xchange_Domain_Repository_UserRepository');
> }
>
> /**
> * Lists all users
> *
> * @return string The rendered view
> */
> public function indexAction() {
> $employees = $this->userRepository->findEmployees();
> $this->view->assign('employees', $employees);
> }
>
> /**
> * Provides form to edit an user
> *
> * @param Tx_Xchange_Domain_Model_User $user
> * @return string An HTML form for editing an user
> * @dontvalidate $user
> */
> public function editAction(Tx_Xchange_Domain_Model_User $user) {
> echo '<pre>';
> var_dump($user);
> exit;
> $this->view->assign('user', $user);
> }
> }
>
> In the view I get the list of the users so my extension can read the data from the database:
>
> <f:for each="{employees}" as="employee">
> <f:link.action action="edit" arguments="{user:employee}">{employee.username}</f:link.action>
> </f:for>
>
> I have the following TS:
>
> config.tx_extbase.persistence.classes {
> /* I also tried with and without this code
> Tx_Extbase_Domain_Model_FrontendUser {
> subclasses {
> Tx_Xchange_Domain_Model_User = Tx_Xchange_Domain_Model_User
> }
> }
> */
>
> Tx_Xchange_Domain_Model_User {
> mapping {
> tableName = fe_users
> recordType = Tx_Xchange_Domain_Model_User
> }
> }
> }
>
> plugin.tx_xchange {
> persistence {
> classes {
> Tx_Xchange_Domain_Model_User {
> mapping {
> tableName = fe_users
> recordType = Tx_Xchange_Domain_Model_User
> }
> }
> }
> }
> }
>
> module.tx_xchange {
> persistence< plugin.tx_xchange.persistence
> }
>
> In ext_tables.php I added these lines and they work. As I mentioned, I get the list in the frontend.
>
> t3lib_div::loadTCA('fe_users');
> $TCA['fe_users']['types']['Tx_Xchange_Domain_Model_User'] = $TCA['fe_users']['types']['0'];
> array_push($TCA['fe_users']['columns']['tx_extbase_type']['config']['items'], array('LLL:EXT:'.$_EXTKEY.'/Resources/Private/Language/locallang_db.xml:fe_users.tx_extbase_type.Tx_Xchange_Domain_Model_User', 'Tx_Xchange_Domain_Model_User'));
>
>
> In the BlogExample it works, but there it is a own table. So I think that extbase couldn't find the database table of my extended class and can't fetch the object.
>
> When I change the editAction to:
>
> /**
> * Provides form to edit an user
> *
> * @param int $user
> * @return string An HTML form for editing an user
> * @dontvalidate $user
> */
> public function editAction($user) {
> echo '<pre>';
> var_dump($user);
> exit;
> $this->view->assign('user', $user);
> }
>
> I get the uid of the user I passed in the link
>
> The link looks like:
>
> domain/typo3/mod.php?M=xchange_XchangeTxXchangeM2&tx_xchange_xchange_xchangetxxchangem2%5Buser%5D=4&tx_xchange_xchange_xchangetxxchangem2%5Baction%5D=edit&tx_xchange_xchange_xchangetxxchangem2%5Bcontroller%5D=User
>
> Does I have an error in my configuration? Does anybody else got this error?
>
> I tried so many "solutions" but they don't worked for me.
>
> Can anybody help?
>
> Thanks
> Patrik
>
>
> Mit freundlichen Grüßen / Kind regards
>
> Patrik Lang
> Entwicklung / Development
>
>
>
> CENTAUR® GMBH
>
> Edisonstraße 3
> 74076 Heilbronn
>
> Fon: +49 7131 79781 350
> Fax: +49 7131 79781 355
>
> Email: patrik.lang at centaur.de<mailto:patrik.lang at centaur.de>
> http://www.centaur.de<http://www.centaur.de/>
>
>
> Sitz der Gesellschaft: Heilbronn
> Handelsregister: HRB Stuttgart 109060 | USt ID Nr.: DE814568446
> Geschäftsführer: Cornelius Walz
>
>
> ________________________________
> Diese Information ist ausschliesslich fuer die adressierte Person oder Organisation bestimmt und koennte vertrauliches und/oder privilegiertes Material enthalten. Personen oder Organisationen, fuer die diese Information nicht bestimmt ist, ist es nicht gestattet, diese zu lesen, erneut zu uebertragen, zu verbreiten, anderweitig zu verwenden oder sich durch sie veranlasst zu sehen, Massnahmen irgendeiner Art zu ergreifen. Sollten Sie diese Nachricht irrtuemlich erhalten haben, bitten wir Sie, sich mit dem Absender in Verbindung zu setzen und das Material von Ihrem Computer zu loeschen.
>
> Sie haben uns gebeten, mit Ihnen ueber das Internet per E-Mail zu korrespondieren. Unbeschadet dessen ist allein die von uns unterzeichnete schriftliche Fassung verbindlich. Wir weisen darauf hin, dass derartige Nachrichten mit und ohne Zutun von Dritten verloren gehen, veraendert oder verfaelscht werden koennen. Herkoemmliche E-Mails sind nicht gegen den Zugriff von Dritten geschuetzt und deshalb ist auch die Vertraulichkeit unter Umstaenden nicht gewahrt Wir haften deshalb nicht fuer die Unversehrtheit von E-Mails nachdem sie unseren Herrschaftsbereich verlassen haben und koennen Ihnen hieraus entstehende Schaeden nicht ersetzen. Sollte trotz der von uns verwendeten Virus-Schutz-Programmen durch die Zusendung von E-Mails ein Virus in Ihre Systeme gelangen, haften wir nicht fuer eventuell hieraus entstehende Schaeden. Dieser Haftungsausschluss gilt nur soweit gesetzlich zulaessig.
More information about the TYPO3-project-typo3v4mvc
mailing list