Hallo Zusammen!
Ich stehe mal wieder vor einem Extbase-Problem. Will einen Paramter über einen Link übergeben, per GET. Was auch soweit funktioniert. Auf der erlinkten Seite möchte ich nun den Paramater auslesen. Und nur das Objekt mit dem Paramater ausgeben.
Habe auch schon was gefunden, jedoch funktioniert es nicht.
Die URL sieht wie folgt aus:
http://dev.streichquartettspielen.de/index.php?id=4&tx_sqscoursemanagement_pi1[uid]=3&cHash=e6d72f904b392d35be6f28491169b905
Mein Controller sieht wie folgt aus:
class CourseController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController {
/**
* courseRepository
*
* @var \TYPO3\Sqscoursemanagement\Domain\Repository\CourseRepository
* @inject
*/
protected $courseRepository;
/**
* action Registration
*
* @return void
*/
public function registrationAction(){
$uid = $this->request->getArgument('uid');
$courses = $this->courseRepository->findRegistrationCourse($uid);
$this->view->assign('courses', $courses);
}
}
?>
Folgenden Fehler erhalte ich:
An argument "uid" does not exist for this request.
Hat jemand eine Idee, woran das liegt?
Will eigentlich nur das Objekt mit der UID 3 ausgeben.
Vielen Dank schon mal!
Sieht im ersten Moment soweit gut aus, allerdings würde man es so eben nicht machen, daher schwer zu sagen was da schief läuft.
Du solltest direkt in der Action ein $course argument erwarten, wenn das alles richtig annotiert ist, dann baut dir das Extbase automatisch zusammen und du musst nicht erst das Repository fragen.
Vielen Dank für deine Antwort.
Das Ding ist, dass ich verschiedene Kurse habe, für die sich der Benutzer anmelden kann. Jetzt will ich, dass er beim Klicken des Links auf der Übersichtsseite auf eine weitere Seite gelangt, über die er sich anmelden kann. Das Formular ist Powermail. Darüber sollen noch allgemeine Daten erscheinen, wie der Preis, Kursname, etc. Diese sollen in Abhängigkeit der UID ausgelesen werden. Gibt es da einen anderen Weg?
Rein theoretisch müsste auch findByProperty($uid) gehen. Damit erspare ich mir die Abfrage im Repository oder?
Habe das auch schon probiert, jedoch ohne erfolg. Habe das Gefühl das bei:
$uid = $this->request->getArgument('uid')
irgend was nicht richtig ist.
Wenn ich das auskommentiere ist der Fehler:
An argument "uid" does not exist for this request.
weg.
Hast du vielleicht einen anderen Weg oder Tipp wo ich nachschauen kann?
Vielen Dank schon mal.
Ist denn
tx_sqscoursemanagement_pi1
das richtige Prefix für dieses Plugin? Und trotzdem würd ich dann die uid als argument der Action erwarten:
/**
* action Registration
*
* @param integer $uid
* @return void
*/
public function registrationAction($uid){
Oh man ich glaub ich steh mal wieder auf dem Schlauch.
Der Prefix stimmt wahrscheinlich nicht. Dachte den kann ich frei wählen.
Wie setzt er sich denn zusammen? Anfängerfrage ich weis, jedoch bin ich noch eher Einsteiger bei der Entwicklung von Extensions.
Durch einsetzen deines Codes kommt folgender Fehler:
An error occurred while trying to call TYPO3\Sqscoursemanagement\Controller\CourseController->registrationAction(). Error: Required property 'uid' does not exist.
Was mache ich falsch?
Dann stimmt bestimmt der Prefix nicht. Schwierig zu sagen wie der richtig lautet 😉
der setzt sich normalerweise zusammen aus tx_{lower_case_name_der_extension}_{lowercase_name_des_plugins}
Den Extensionnamen weißt du selbst am besten, dürfte "sqscoursemanagement" sein Wenn ich die Fehlermeldung so sehe. den Pluginnamen kann ich so nicht erkennen, der steht in deiner ext_tables.php, da müsstest du irgendwo Tx_Extbase_Utility_Extension::registerPlugin() aufrufen. Der zweite Paramter ist dein Pluginname.
tx_sqscoursemanagement_ ist also schon mal gut, aber ich vermute der Pluginname ist anders als "Pi1". Wenn nicht dann ist den Extensionname noch irgendwie anders, vielleicht?
Vielen Dank für die Erklärung. Hat mir schon viel geholfen.
Mein Link sieht jetzt wie folgt aus:
http://dev.streichquartettspielen.de/index.php?id=4&tx_sqscoursemanagement_sqscourseregistration[course]=3&tx_sqscoursemanagement_sqscourseregistration[action]=registration&tx_sqscoursemanagement_sqscourseregistration[controller]=Course&cHash=838068f046c2e42b6fe01d34b5e2c520
Den actionController habe ich wie folgt angepasst:
/**
* action Registration
*
* @param Tx_Sqscoursemanagement_Domain_Model_Course $course
* @return string
*/
public function registrationAction(Tx_Sqscoursemanagement_Domain_Model_Course
$course){
$this->view->assign('courses', $course);
}
Jetzt bekomme ich aber folgenden Fehler:
The classname "Tx_Sqscoursemanagement_Domain_Model_Course" was not found and thus can not be reflected.
Der Klassenname habe ich geprüft und er stimmt.
Hast du vielleicht noch eine Idee woran das liegen könnte?
Habe das Problem selbst lösen können.
Musste den Parameter wie folgt angeben:
\TYPO3\Sqscoursemanagement\Domain\Model\Course anstatt Tx_Sqscoursemanagement_Domain_Model_Course
Jetzt läuft es einwandfrei.
Kitsunet, besten Dank für deine Hilfe.