Hi lilli,
Happy new year!
No, giix doesn’t provide this feature, but you can just follow this wiki: How to upload a file using a model.
Are you making great progress?
Hi lilli,
Happy new year!
No, giix doesn’t provide this feature, but you can just follow this wiki: How to upload a file using a model.
Are you making great progress?
Happy new Y(ii)ear to you! ![]()
I’ve made some progress but not that much (you know, holidays…).
Anyway, Yii it’s really great. I’m wondering how the 2.0 version will be… Let’s see.
P.S.: i’ve also found this tutorial about file uploading and it could be interesting.
Lol ![]()
It will be awesome. Check here for mouth-watering info.
That’s a good tutorial, with lots of details. It seems to cover the same approach used on the wiki.
Oh, and a security note: as a general rule, you shouldn’t save the uploaded file under a Web-accessible directory unless necessary and until you verify the nature of the file (that the file is actually an image, for example).
References:
https://www.owasp.org/index.php/Unrestricted_File_Upload
http://en.wikibooks.org/wiki/Web_Application_Security_Guide/File_upload_vulnerabilities
very useful links. thanks!
Hi Rodrigo,
me again. ![]()
What if I need to add an extra data to the pivot tables?
Example:
STUDENTS
id_student
username
…
EXAMS
id_exam
exams
…
STUDENTS_X_EXAMS
id_student
id_exam
vote (this is the extra-primary keys data)
date (another one…)
How can I insert the additional datas on the Insert/Update views?
Thanks,
Lilli
[color="#006400"]/* moved from General Discussion */[/color]
I’ve got a Category model, an Image model and pivot table "category_image’ with additional field “position” for sorting images within a category. In Category controller:
public function actionSort($catId)
{
foreach( $_POST['img'] as $order => $id )
{
$command = Yii::app()->content->createCommand(); //content is my DB connection
$command->update(
'category_image',
array(
'position'=>$order,
),
'image_id=:ID AND category_id=:catID',
array(':ID'=>$id,'catID'=>$catId)
);
//echo $id.'=>'.$order.'=>'.$catId.'/';
}
}
Hope this helps
Thanks luc,
but when i have to call your function?
I mean let's go back to my example:
in Students controller i have this create action, generated with giix.
public function actionCreate() {
$model = new Students;
$this->performAjaxValidation($model, 'Students-form');
if (isset($_POST['Students'])) {
$model->setAttributes($_POST['Students']);
$relatedData = array(
'exams' => $_POST['Students']['exams'] === '' ? null : $_POST['Students']['exams'],
);
if ($model->saveWithRelated($relatedData)) {
if (Yii::app()->getRequest()->getIsAjaxRequest())
Yii::app()->end();
else
$this->redirect(array('view', 'id' => $model->id_student));
}
}
$this->render('create', array( 'model' => $model));
}
and in my view i have this:
<div class="relationscreate">
<h2><?php echo GxHtml::encode($model->getRelationLabel('exams')); ?></h2>
<?php echo $form->checkBoxList($model, 'exams', GxHtml::encodeEx(GxHtml::listDataEx(Exams::model()->findAllAttributes(null, true)), false, true)); ?>
</div>
where do i have to put the vote and date, additional fields, to associate them with the relative checkboxlist exam?
I think that in your case, checkBoxList is not the right choice.
Using a loop through
$exams=Exams::model()->findAll();
and create for each exam relation a checkbox for setting the relation and all the neccessary additionnal fields (vote, date …).
Luc, i still have many doubts…
forget the additional fields for a moment. how can i get the same output of a checkBoxList related to a model without using it?
this is the output of the checkBoxList:
<input type="hidden" name="Students[exams]" value="" id="ytStudents_exams"><span id="Students_exams">
<input type="checkbox" name="Students[exams][]" checked="checked" value="1" id="Students_exams_0"><label for="Students_exams_0">History</label><br>
<input type="checkbox" name="Students[exams][]" checked="checked" value="2" id="Students_exams_1"> <label for="Students_exams_1">Math</label><br>
<input type="checkbox" name="Students[exams][]" value="3" id="Students_exams_2"> <label for="Students_exams_2">Geography</label><br>
<input type="checkbox" name="Students[exams][]" value="4" id="Students_exams_3"> <label for="Students_exams_3">Literature</label>
for managing the insert/update of a many to many relations i need something like a checkBoxList.
$exams=Exams::model()->findAll();
foreach ($exams as $key=>$value){
//i really can't find a way for having the same output
//(i can get just the labels but not the value or if they're checked or not)
}
i’m quite desperate… ![]()
ok,
if i create the array like this:
$exams=GxHtml::encodeEx(GxHtml::listDataEx(Exams::model()->findAllAttributes(null, true)), false, true);
i will have an array with as key the primary key of Exams and as value the value of the exams but it’s not enough.
i still have the problem in update action, because, without checkBoxList, i don’t know how to pass the model to say if it’s checked or not.
help, please. all my project depends if i can fix this problem or not.
probably this is not the best solution, but it’s a solution (and i don’t see many alternatives):
on students view:
$exams=GxHtml::encodeEx(GxHtml::listDataEx(Exams::model()->findAllAttributes(null, true)), false, true);
foreach ($exams as $key=>$value){
echo "<input type='text' name='Students[vote][".$key."]' value='".$students_x_exams[$key]."' >";
}
and in the update action:
public function actionUpdate($id) {
$model = $this->loadModel($id, 'Students');
$students_x_exams = StudentsXExams::model()->findAll('id_student=:id_student',
array(':id_student'=>(int) $id));
$students_x_exams=CHtml::listData($students_x_exams,"id_exam","vote");
...
if ($model->saveWithRelated($relatedData)) {
//save votes
$students_x_exams= new StudentsXExams();
foreach ($_POST['Students']['vote'] as $id_exam=>$vote){
$criteria= new CDbCriteria();
$criteria->condition="id_student=".$model->id_student;
$criteria->addCondition("id_exam=".$id_exam);
$istr_x_agg->updateAll(array('vote'=>$vote),$criteria);
}
$this->redirect(array('view', 'id' => $model->id_student));
}
...
$this->render('update', array(
'model' => $model,
'students_x_exams'=>$students_x_exams,
));
}
Hi Guys,
I have a little problem. On my 1.1.12, I have absolutely no problem, but I’ve copied my models, controllers, and views to a 1.1.13 version, and I’ve got the following PHP warning at only by one single “model” or “module”:
htmlspecialchars(): Invalid multibyte sequence in argument
...\framework\web\helpers\CHtml.php(98)
return htmlspecialchars($text,ENT_QUOTES,Yii::app()->charset);
Stack Trace:
#0...yii\framework\web\helpers\CHtml.php(98): htmlspecialchars()
#1...yii\framework\web\helpers\CHtml.php(2071): CHtml::encode()
#2...yii\framework\web\helpers\CHtml.php(1566): CHtml::listOptions()
#3...yii\framework\zii\widgets\grid\CDataColumn.php(95): CHtml::activeDropDownList()
#4...yii\framework\zii\widgets\grid\CGridColumn.php(109): CDataColumn->renderFilterCellContent()
#5...yii\framework\zii\widgets\grid\CGridView.php(505): CGridColumn->renderFilterCell()
#6...yii\framework\zii\widgets\grid\CGridView.php(483): CGridView->renderFilter()
#7...yii\framework\zii\widgets\grid\CGridView.php(453): CGridView->renderTableHeader()
#8...yii\framework\zii\widgets\CBaseListView.php(160): CGridView->renderItems()
#9 unknown(0): CBaseListView->renderSection(array("{items}", "items"))
#10...yii\framework\zii\widgets\CBaseListView.php(143): preg_replace_callback("/{(\w+)}/", array(CGridView, "renderSection"), "{summary} {items} {pager}")
#11...yii\framework\zii\widgets\CBaseListView.php(128): CBaseListView->renderContent()
#12...yii\framework\web\CBaseController.php(173): CBaseListView->run()
#13...(project folder)\protected\views\munkakor\admin.php(80): CBaseController->widget("zii.widgets.grid.CGridView", array("id" => "munkakor-grid", "dataProvider" => CActiveDataProvider, "filter" => Munkakor, "columns" => array("id", array("name" => "nbsp_name", "type" => "raw", "htmlOptions" => array("style" => "white-space: nowrap")), "rov", "root", ...)))
#14...yii\framework\web\CBaseController.php(126): require("C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdo...")
#15...yii\framework\web\CBaseController.php(95): CBaseController->renderInternal("C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdo...", array("model" => Munkakor), true)
#16...yii\framework\web\CController.php(869): CBaseController->renderFile("C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdo...", array("model" => Munkakor), true)
#17...yii\framework\web\CController.php(782): CController->renderPartial("admin", array("model" => Munkakor), true)
#18...(project folder)\protected\controllers\MunkakorController.php(90): CController->render("admin", array("model" => Munkakor))
#19...yii\framework\web\actions\CInlineAction.php(49): MunkakorController->actionAdmin()
#20...yii\framework\web\CController.php(308): CInlineAction->runWithParams(array())
#21...yii\framework\web\CController.php(286): CController->runAction(CInlineAction)
#22...yii\framework\web\CController.php(265): CController->runActionWithFilters(CInlineAction, array())
#23...yii\framework\web\CWebApplication.php(282): CController->run("admin")
#24...yii\framework\web\CWebApplication.php(141): CWebApplication->runController("munkakor/admin")
#25...yii\framework\base\CApplication.php(169): CWebApplication->processRequest()
#26...(project folder)\index.php(13): CApplication->run()
after a few hours of experimenting with utf8 settings (it seems all good to me everywhere) and googling I could figure out that the problem is with this one single line in protected\views\munkakor\admin.php’s CGridView’s columns section:
array(
'name' => 'uzem_id',
'value' => 'GxHtml::link($data->uzem, array("uzem/view", "id" => $data->uzem_id))',
'type' => 'raw',
'filter' => GxHtml::listDataEx(Uzem::model()->findAll(array('order' => 'root, lft ASC')), 'id', 'Nbsp_name'),
),
more specifically:
‘filter’ => GxHtml::listDataEx(Uzem::model()->findAll(array(‘order’ => ‘root, lft ASC’)), ‘id’, ‘Nbsp_name’),
if I comment this out, the warning goes away. there are absolutely no special characters anywhere, no BOMs…
What can be wrong with this code?
UPDATE: the problem is definitely with a function in my model:
public function getNbspName() {
return str_repeat(" ", ($this->level - 1) * 4) . $this->name;
}
it doesn’t like there, but so far I had no problem with this. It’s only since of the newer version of yii…
Thanks a lot!
BR
c