Zacznę od tego, że Yii dla mnie to nowość- generalnie frameworki. Nie zajmowałem się dotąd web developerką. Dostałem małego sampla od kolegi i mam kilka pytań:
Będąc w widoku stworzyłem CHtml::dropDownList(‘imieNazwiskoList’,’’, $imieNazwiskoList) jak przekazać wartość zaznaczonego pola listy, do modelu- do gotowej metody bez dodawania kolejnych argumentów metody?
<?php $form = ActiveForm::begin(); ?>
<?= $form->field( $model, 'clientId')
->dropDownList( $model->getClientList()//getCLientList to metoda pobierająca liste klientów- czaje
, ['prompt' => '' ] ) //po co to?
?>
<div class="form-group">
<?= Html::submitButton('Create'//to 'create' odwołuje się do actionCreate w modelu tak?
, ['class' => btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
public function actionCreate()
{
$model = new ClientData();
if ($model->load(Yii::$app->request->post() & $model->save()){//sprawdza czy jest zapytanie dodania rekordu?
return $this->redirect(['index']);// po dodaniu przerzuca nas do indexu
}
return $this->render('create', [// czemu służy to create?
'model' => $model,// 'model' to odwołanie do którego modelu? w widoku?
]);
}
Wybaczcie, że tak łopatologicznie, ale w ogóle nie czaje o co chodzi w tych "frameworkach" dlaczego niektóre rzeczy są w apostrofach? Całe życie i wszędzie to po prostu był tekst, ale tutaj są one formą wskaźników czy konektorów pomiędzy widokiem/kontrolerem/modelem?
Nie czaje, tego ale muszę to jakoś ogarnąć, projekt tego odemnie wymaga, a samo się nie zrobi
<?php $form = ActiveForm::begin(); ?>
<?= $form->field( $model, 'clientId')
->dropDownList( $model->getClientList()
, ['prompt' => '' ] ) //żeby defaultowy wybór na liscie to był pusty tekst, opcjonalna opcja;
?>
<div class="form-group">
<?= Html::submitButton('Create'// jeżeli nie zdefiniujesz innego URL, to defaultowo wybierany jest controller w którym sie znajdujesz;
, ['class' => btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
public function actionCreate()
{
$model = new ClientData();
if ($model->load(Yii::$app->request->post() & $model->save()){// Pierwsze sprawdza, czy w zapytaniu do kontrolera znajduje się coś w $_POST, jeżeli tak to ładuje to modelu wszystkie dane z formu, a drugie zapisuje dane uzsykane z poprzedniego, jeżeli zapis jest poprawny to zwraca true;
return $this->redirect(['index']);// tak jeżeli rekord został zapisany przeżuca nas do wskazanego kontrolera/akcji, tutaj jest pominięty kontroler, bo wybieramy akcje z kontrolera w którym się znajdujemy;
}
return $this->render('create', [// jeżeli któryś z warunków w if jest false, to wyrenderuję Ci create.php a on wyrenderuje _form;
'model' => $model,// 'model' // model to odwołanie do modelu do którego chcesz zapisać dane, do tego który zdefiniowany jest w pierwszej linijce akcji ($model = new ClientData()<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/wink.gif' class='bbc_emoticon' alt=';)' />;
]);
}
edit. jakby coś było niejasne śmiało pytaj, jutro odpowiem.
Jak przechwycić wartość zaznaczonej opcji w droplist? bo chciałbym dynamicznie zaraz po zaznaczeniu pozycji, znaleźć szukaną i wygenerować dane- jak już wiem(chwała Ci za to). Tylko jak przechwycić tekst z dropdownlisty. Bo tego tam nie czaje. Chcę ją wrzucić do zmiennej w widoku.
z tej listy pobrać imie_nazwisko(jquery, mówisz?), znaleźć userid(DONE), dalej to jest przesyłane do komponentu (DONE), i z komponentu odpalana jest metoda z modelu Userów(DONE). W zasadzie jedyne co mi brakuje, to dosłownie wyciągnąć to co jest wybrane w dropDownList i będę miał to gotowe.
Jeżeli chcesz to przekazać z odświeżeniem strony to najprościej submit button, który przekaże selected value do kontrolera i tam robisz co chcesz z tą zmienną dalej, np:
generujesz na jej podstawie jakiś view.
Jeżeli to ma być dynamic action, bez przeładowania strony to przekazujesz to do kontrolera za pomocą jQuery, sprawdź ID jakie ma twój input, i zbierz selected value on change event i przekaż Ajaxem do kontrolera.
Zbierz zwrotke i zrób z nią to co Ci potrzeba.
Jakoś tak mgliście to rozumiem, chyba zbyt dużo siedzenia już dziś w kodzie.
Ja to bym zrobił tak, renderuje sobie view w którym jest:
HA zrobiłem działa, w końcu czaję na jakiej zasadzie te dane wędrują między poziomami (widok/kontroler/model)… Cytując klasyka “Bo kto sie w PHP’ie połapie” Dziękuję!