[Frage] Fehler: An error occurred while trying to call Controller->showAction()

  • maggo maggo
    R2-D2
    0 x
    93 Beiträge
    0 Hilfreiche Beiträge
    16. 07. 2015, 19:14

    Hallo,

    ich habe eine Extension mit dem ExtensionBuilder erstellt und noch ein wneig angepasst. Darin habe ich zwei Tabellen: "Hotels" und "Zimmer" - wobei jedes Hotel mehrere Zimmer mit Namen etc. haben kann (1-n).
    Sobald ich allerdings in einem Hotel z.B. über das Backend (TCA) ein Zimmer hinzu füge, kann ich das Hotel mit der Standard-showAction nict anzeigen lassen und erhalte den Fehler "An error occurred while trying to call XYZ\XX\Controller\HotelController->showAction()"

    Hier einmal ein paar Ausschnitte aus meinen Dateien:

    Classes/Controller/HotelController.php

    1. /**
    2.  * HotelController
    3.  */
    4. class HotelController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
    5.  
    6. /**
    7. * hotelRepository
    8. *
    9. * @var \XYZ\XX\Domain\Repository\HotelRepository
    10. * @inject
    11. */
    12. protected $hotelRepository = NULL;
    13.  
    14. /**
    15. * action list
    16. *
    17. * @return void
    18. */
    19. public function listAction() {
    20. $hotels = $this->hotelRepository->findAll();
    21. $this->view->assign('hotels', $hotels);
    22. }
    23.  
    24. /**
    25. * action show
    26. *
    27. * @param \XYZ\XX\Domain\Model\Hotel $hotel
    28. * @return void
    29. */
    30. public function showAction(\XYZ\XX\Domain\Model\Hotel $hotel) {
    31. $this->view->assign('hotel', $hotel);
    32. }
    33.  
    34. /**
    35. * action edit
    36. *
    37. * @param \XYZ\XX\Domain\Model\Hotel $hotel
    38. * @ignorevalidation $hotel
    39. * @return void
    40. */
    41. public function editAction(\XYZ\XX\Domain\Model\Hotel $hotel) {
    42. $this->view->assign('hotel', $hotel);
    43. }
    44.  
    45. /**
    46. * action update
    47. *
    48. * @param \XYZ\XX\Domain\Model\Hotel $hotel
    49. * @return void
    50. */
    51. public function updateAction(\XYZ\XX\Domain\Model\Hotel $hotel) {
    52. $this->addFlashMessage('Die Einstellungen wurden aktualisiert.', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::ERROR);
    53. $this->hotelRepository->update($hotel);
    54. }
    55. }

    ext_localconf.php

    1. \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    2. 'XYZ.' . $_EXTKEY,
    3. 'Hotelliste',
    4. 'Hotel' => 'list,show',
    5.  
    6. ),
    7. // non-cacheable actions
    8. 'Hotel' => 'list,show',
    9.  
    10. )
    11. );
    12.  
    13. \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    14. 'XYZ.' . $_EXTKEY,
    15. 'Hotelchange',
    16. 'Hotel' => 'edit,update,show',
    17.  
    18. ),
    19. // non-cacheable actions
    20. 'Hotel' => 'edit,update,show',
    21.  
    22. )
    23. );
    24.  
    25. \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    26. 'XYZ.' . $_EXTKEY,
    27. 'Zimmer',
    28. 'Zimmer' => 'list, show, new, create, delete, edit, update',
    29.  
    30. ),
    31. // non-cacheable actions
    32. 'Zimmer' => 'list, show, new, create, delete, edit, update',
    33.  
    34. )
    35. );

    Classes/Domain/Model/Hotel.php

    1. /**
    2.  * Hotel
    3.  */
    4. class Hotel extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
    5.  
    6. /**
    7. * name
    8. *
    9. * @var string
    10. * @validate NotEmpty
    11. */
    12. protected $name = '';
    13.  
    14. /**
    15. * kategorie
    16. *
    17. * @var integer
    18. */
    19. protected $kategorie = 0;
    20.  
    21. /**
    22. * latitude
    23. *
    24. * @var float
    25. */
    26. protected $latitude = 0.0;
    27.  
    28. /**
    29. * longitude
    30. *
    31. * @var float
    32. */
    33. protected $longitude = 0.0;
    34.  
    35. /**
    36. * kontaktdaten
    37. *
    38. * @var string
    39. */
    40. protected $kontaktdaten = '';
    41.  
    42. /**
    43. * buchungslink
    44. *
    45. * @var string
    46. */
    47. protected $buchungslink = '';
    48.  
    49. /**
    50. * buchungshotline
    51. *
    52. * @var string
    53. */
    54. protected $buchungshotline = '';
    55.  
    56. /**
    57. * buchungsemail
    58. *
    59. * @var string
    60. */
    61. protected $buchungsemail= '';
    62.  
    63. /**
    64. * teaser1
    65. *
    66. * @var string
    67. */
    68. protected $teaser1 = '';
    69.  
    70. /**
    71. * teaser2
    72. *
    73. * @var string
    74. */
    75. protected $teaser2 = '';
    76.  
    77. /**
    78. * teaser3
    79. *
    80. * @var string
    81. */
    82. protected $teaser3 = '';
    83.  
    84. /**
    85. * teaser4
    86. *
    87. * @var string
    88. */
    89. protected $teaser4 = '';
    90.  
    91. /**
    92. * beschreibung
    93. *
    94. * @var string
    95. */
    96. protected $beschreibung = '';
    97.  
    98. /**
    99. * vermieten
    100. *
    101. * @var string
    102. */
    103. protected $vermieten = '';
    104.  
    105. /**
    106.   * bilder
    107.   *
    108.   * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\TYPO3\CMS\Extbase\Domain\Model\FileReference>
    109.   */
    110. protected $bilder;
    111.  
    112. /**
    113. * preis
    114. *
    115. * @var string
    116. */
    117. protected $preis = '';
    118.  
    119. /**
    120. * author
    121. *
    122. * @var string
    123. */
    124. protected $author = '';
    125.  
    126. /**
    127. * zimmer
    128. *
    129. * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\XYZ\XX\Domain\Model\Zimmer>
    130. * @cascade remove
    131. */
    132. protected $zimmer = NULL;
    133.  
    134. /**
    135. * __construct
    136. */
    137. public function __construct() {
    138. $this->initStorageObjects();
    139. }
    140.  
    141. /**
    142. * Initializes all ObjectStorage properties
    143. * Do not modify this method!
    144. * It will be rewritten on each save in the extension builder
    145. * You may modify the constructor of this class instead
    146. *
    147. * @return void
    148. */
    149. protected function initStorageObjects() {
    150. $this->bilder = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    151. $this->zimmer = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
    152. }
    153.  
    154. /**
    155. * Returns the name
    156. *
    157. * @return string $name
    158. */
    159. public function getName() {
    160. return $this->name;
    161. }
    162.  
    163. /**
    164. * Sets the name
    165. *
    166. * @param string $name
    167. * @return void
    168. */
    169. public function setName($name) {
    170. $this->name = $name;
    171. }
    172.  
    173. /**
    174. * Returns the kategorie
    175. *
    176. * @return integer $kategorie
    177. */
    178. public function getKategorie() {
    179. return $this->kategorie;
    180. }
    181.  
    182. /**
    183. * Sets the kategorie
    184. *
    185. * @param integer $kategorie
    186. * @return void
    187. */
    188. public function setKategorie($kategorie) {
    189. $this->kategorie = $kategorie;
    190. }
    191.  
    192. /**
    193. * Returns the latitude
    194. *
    195. * @return float $latitude
    196. */
    197. public function getLatitude() {
    198. return $this->latitude;
    199. }
    200.  
    201. /**
    202. * Sets the latitude
    203. *
    204. * @param float $latitude
    205. * @return void
    206. */
    207. public function setLatitude($latitude) {
    208. $this->latitude = $latitude;
    209. }
    210.  
    211. /**
    212. * Returns the longitude
    213. *
    214. * @return float $longitude
    215. */
    216. public function getLongitude() {
    217. return $this->longitude;
    218. }
    219.  
    220. /**
    221. * Sets the longitude
    222. *
    223. * @param float $longitude
    224. * @return void
    225. */
    226. public function setLongitude($longitude) {
    227. $this->longitude = $longitude;
    228. }
    229.  
    230. /**
    231. * Returns the kontaktdaten
    232. *
    233. * @return string $kontaktdaten
    234. */
    235. public function getKontaktdaten() {
    236. return $this->kontaktdaten;
    237. }
    238.  
    239. /**
    240. * Sets the kontaktdaten
    241. *
    242. * @param string $kontaktdaten
    243. * @return void
    244. */
    245. public function setKontaktdaten($kontaktdaten) {
    246. $this->kontaktdaten = $kontaktdaten;
    247. }
    248.  
    249. /**
    250. * Returns the buchungslink
    251. *
    252. * @return string $buchungslink
    253. */
    254. public function getBuchungslink() {
    255. return $this->buchungslink;
    256. }
    257.  
    258. /**
    259. * Sets the buchungslink
    260. *
    261. * @param string $buchungslink
    262. * @return void
    263. */
    264. public function setBuchungslink($buchungslink) {
    265. $this->buchungslink = $buchungslink;
    266. }
    267.  
    268. /**
    269. * Returns the buchungshotline
    270. *
    271. * @return string $buchungshotline
    272. */
    273. public function getBuchungshotline() {
    274. return $this->buchungshotline;
    275. }
    276.  
    277. /**
    278. * Sets the buchungshotline
    279. *
    280. * @param string $buchungshotline
    281. * @return void
    282. */
    283. public function setBuchungshotline($buchungshotline) {
    284. $this->buchungshotline = $buchungshotline;
    285. }
    286.  
    287. /**
    288. * Returns the buchungsemail
    289. *
    290. * @return string $buchungsemail
    291. */
    292. public function getBuchungsemail() {
    293. return $this->buchungsemail;
    294. }
    295.  
    296. /**
    297. * Sets the buchungsemail
    298. *
    299. * @param string $buchungsemail
    300. * @return void
    301. */
    302. public function setBuchungsemail($buchungsemail) {
    303. $this->buchungsemail = $buchungsemail;
    304. }
    305.  
    306. /**
    307. * Returns the teaser1
    308. *
    309. * @return string $teaser1
    310. */
    311. public function getTeaser1() {
    312. return $this->teaser1;
    313. }
    314.  
    315. /**
    316. * Sets the teaser1
    317. *
    318. * @param string $teaser1
    319. * @return void
    320. */
    321. public function setTeaser1($teaser1) {
    322. $this->teaser1 = $teaser1;
    323. }
    324.  
    325. /**
    326. * Returns the teaser2
    327. *
    328. * @return string $teaser2
    329. */
    330. public function getTeaser2() {
    331. return $this->teaser2;
    332. }
    333.  
    334. /**
    335. * Sets the teaser2
    336. *
    337. * @param string $teaser2
    338. * @return void
    339. */
    340. public function setTeaser2($teaser2) {
    341. $this->teaser2 = $teaser2;
    342. }
    343.  
    344. /**
    345. * Returns the teaser3
    346. *
    347. * @return string $teaser3
    348. */
    349. public function getTeaser3() {
    350. return $this->teaser3;
    351. }
    352.  
    353. /**
    354. * Sets the teaser3
    355. *
    356. * @param string $teaser3
    357. * @return void
    358. */
    359. public function setTeaser3($teaser3) {
    360. $this->teaser3 = $teaser3;
    361. }
    362.  
    363. /**
    364. * Returns the teaser4
    365. *
    366. * @return string $teaser4
    367. */
    368. public function getTeaser4() {
    369. return $this->teaser4;
    370. }
    371.  
    372. /**
    373. * Sets the teaser4
    374. *
    375. * @param string $teaser4
    376. * @return void
    377. */
    378. public function setTeaser4($teaser4) {
    379. $this->teaser4 = $teaser4;
    380. }
    381.  
    382. /**
    383. * Returns the beschreibung
    384. *
    385. * @return string $beschreibung
    386. */
    387. public function getBeschreibung() {
    388. return $this->beschreibung;
    389. }
    390.  
    391. /**
    392. * Sets the beschreibung
    393. *
    394. * @param string $beschreibung
    395. * @return void
    396. */
    397. public function setBeschreibung($beschreibung) {
    398. $this->beschreibung = $beschreibung;
    399. }
    400.  
    401. /**
    402. * Returns the vermieten
    403. *
    404. * @return string $vermieten
    405. */
    406. public function getVermieten() {
    407. return $this->vermieten;
    408. }
    409.  
    410. /**
    411. * Sets the vermieten
    412. *
    413. * @param string $vermieten
    414. * @return void
    415. */
    416. public function setVermieten($vermieten) {
    417. $this->vermieten = $vermieten;
    418. }
    419.  
    420.  
    421. /**
    422. * Adds a FileReference
    423. *
    424. * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $bilder
    425. * @return void
    426. */
    427. public function addBilder(\TYPO3\CMS\Extbase\Domain\Model\FileReference $bilder) {
    428. $this->bilder->attach($bilder);
    429. }
    430.  
    431. /**
    432. * Removes a FileReference
    433. *
    434. * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $bilderToRemove The FileReference to be removed
    435. * @return void
    436. */
    437. public function removeBilder(\TYPO3\CMS\Extbase\Domain\Model\FileReference $bilderToRemove) {
    438. $this->bilder->detach($bilderToRemove);
    439. }
    440.  
    441. /**
    442.   * get the bilder
    443.   *
    444.   * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage
    445.   */
    446. public function getBilder() {
    447. return $this->bilder;
    448. }
    449.  
    450. /**
    451.   * sets the bilder
    452.   *
    453.   * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage $bilder
    454.   *
    455.   * @return void
    456.   */
    457. public function setBilder($bilder) {
    458. $this->bilder = $bilder;
    459. }
    460.  
    461. /**
    462. * Returns the preis
    463. *
    464. * @return string $preis
    465. */
    466. public function getPreis() {
    467. return $this->preis;
    468. }
    469.  
    470. /**
    471. * Sets the preis
    472. *
    473. * @param string $preis
    474. * @return void
    475. */
    476. public function setPreis($preis) {
    477. $this->preis = $preis;
    478. }
    479.  
    480. /**
    481. * Returns the author
    482. *
    483. * @return string $author
    484. */
    485. public function getAuthor() {
    486. return $this->author;
    487. }
    488.  
    489. /**
    490. * Sets the author
    491. *
    492. * @param string $author
    493. * @return void
    494. */
    495. public function setAuthor($author) {
    496. $this->author = $author;
    497. }
    498.  
    499. /**
    500. * Adds a Zimmer
    501. *
    502. * @param \XYZ\XX\Domain\Model\Zimmer $zimmer
    503. * @return void
    504. */
    505. public function addZimmer(\XYZ\XX\Domain\Model\Zimmer $zimmer) {
    506. $this->zimmer->attach($zimmer);
    507. }
    508.  
    509. /**
    510. * Removes a Zimmer
    511. *
    512. * @param \XYZ\XX\Domain\Model\Zimmer $zimmerToRemove The Zimmer to be removed
    513. * @return void
    514. */
    515. public function removeZimmer(\XYZ\XX\Domain\Model\Zimmer $zimmerToRemove) {
    516. $this->zimmer->detach($zimmerToRemove);
    517. }
    518.  
    519. /**
    520. * Returns the zimmer
    521. *
    522. * @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\XYZ\XX\Domain\Model\Zimmer> $zimmer
    523. */
    524. public function getZimmer() {
    525. return $this->zimmer;
    526. }
    527.  
    528. /**
    529. * Sets the zimmer
    530. *
    531. * @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\XYZ\XX\Domain\Model\Zimmer> $zimmer
    532. * @return void
    533. */
    534. public function setZimmer(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $zimmer) {
    535. $this->zimmer = $zimmer;
    536. }
    537.  
    538. }

    Den selben Fehler bekomme ich auch, wenn ich über das frontend ein Zimmer hinzufügen, ändern oder löschen möchte.

    Habt ihr eine Idee? googlen und probieren hat mich bisher nicht voran gebracht.


  • 1
  • Schweriner Schwerine...
    Jedi-Ratsmitglied
    0 x
    554 Beiträge
    60 Hilfreiche Beiträge
    20. 07. 2015, 14:54

    An error occured while trying to call blaAction... ein Fehler der diverse Ursachen hat. Bei mir kommt er meistens dann zustande, wenn irgendetwas mit meinem Model nicht mehr stimmt und es auch irgendwelchen Gründen nicht mehr valide ist.
    Dirty aber eine Lösung bei diesem Problem könnte sein die Annotation @ignorevalidation $hotel vor die showAction zu setzen :)

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    21. 07. 2015, 10:27

    Hallo,

    die deutsche Sprache ist echt toll. Man kann mit ihr beinahe alles ausdrücken.
    Man tut sich aber keinen Gefallen, wenn man seine Bezeichner deutsch kodiert.
    Einmal ist hier $zimmer ein Zimmer, andersmal ist (sind) $zimmer alle Zimmer des Hotels.
    Das zum einen.

    Zum anderen...
    Hat es einen Grund, warum du configurePlugin auf drei Aufrufe verteilst?
    Du sprichst damit drei verschiedene Plugins an.

  • maggo maggo
    R2-D2
    0 x
    93 Beiträge
    0 Hilfreiche Beiträge
    27. 08. 2015, 12:53

    ach manchmal kann es so einfach sein... ich habe im model

    1. /**
    2. * name
    3. *
    4. * @var string
    5. * @validate NotEmpty
    6. */
    7. protected $name = '';

    zu stehen. Ich sage ihm hier, dass der String nicht leer sein darf, gabe ihm aber als Standardwert einen leeren Wert ... $name = 'irgendwas'; behebt das Problem dann schon :D

  • 1