I can not create Dropdownbox in Yii framework - yii

I want to create dropdownbox in Yii framework which have name is Category,I copy in the stackoverflow but it has error,
<form>
<?php
$list = CHtml::listData(Categories::model()->findAll(array('order' => 'cate_name')), 'id', 'cate_name');
echo $form->dropDownList("Category", 'cate_name', $list);
?>
</form>
here is error:
Undefined variable: form

Your form should looks like this:
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'your-form',
'enableAjaxValidation'=>false,
)); ?>
<?php
$list = CHtml::listData(Categories::model()->findAll(array('order' => 'cate_name')), 'id', 'cate_name');
echo $form->dropDownList("Category", 'cate_name', $list);
?>
<?php $this->endWidget(); ?>
NOTE: replace form tag with form widget

Instead of using html form tag, you have to use yii form widget.
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'form_id',
)); ?>
For tutorial: http://www.yiiframework.com/doc/guide/1.1/en/form.view

Related

Class 'yii\models\user' not found in view yii2

I am using YII2 advanced and I am trying from some hour but not any code working for me. I want to create dropdown from user table in my post page. I have found this error Class 'yii\models\user' not found. i have created this post with GII. my _form.php code
<?php
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\models\user;
use yii\widgets\ActiveForm;
/* #var $this yii\web\View */
/* #var $model app\models\Posts */
/* #var $form yii\widgets\ActiveForm
<?php/* <?= $form->field($model, 'id')->textInput(['value' => \Yii::$app->user->identity->id]) ?>
use yii\models\user;
*/
?>
<div class="posts-form">
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'post_title')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'post_description')->textarea(['rows' => 6]) ?>
<?php
echo Html::activeDropDownList($model, 'author_id',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>
Why not working please anyone help me.
Thanks in advence
User::find() shows that you would use a User model, so really in uppercase as scaisEdge has answered to you.
However you have to know, in what namespace your User model is sitting. Yii2 doesn't have a User model, you have to create it. You mentioned, that you are using the advanced template. In that case you should create a User model in 'common/models/User.php' instead of 'models/User.php'. Follow the description in the Yii2 Guide.
In php typically a class name begin with an Uppercase char so in a unix like env (with file system based on a case sensitive constrain ) this must match try
use yii\models\User;

how to generating a dropdown list in yii2

I tried to make a dropdown list in yii2 using this link : How to make a drop down list in yii2?
my code is :
<?php use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?= $listdata=ArrayHelper::map(Product::find()->all(),'id','name'); ?>
<?= $form->field($model, 'parent_id')-> dropDownList($listdata); ?>
but I have a problem in line of using ArrayHelper
the problem is:
PHP Notice – yii\base\ErrorException
Array to string conversion.......! I tested the below code :
$listData=ArrayHelper::map(Product::find()->asArray()->all(),'id','name');
but it dos not solved and has the same error!
whats the problem? can somebody help me?
You are trying to echo an array, change <?= to <?php in:
<?= $listdata=ArrayHelper::map(Product::find()->all(),'id','name'); ?>
Try like this
<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?= $form->field($model, 'parent_id')->dropDownList(
ArrayHelper::map(Product::find()->all(),'id','name'),
['prompt'=>'Select '])
?>

How to use javascript:void(0) in menu of yii

How to use javascript:void(0) in menu of yii
<?php $this->widget('zii.widgets.CMenu',array( 'items'=>array( array('label'=>'Home', 'url'=>array('site/funtionname')),), )); ?>
i have tried using like this:-
<?php $this->widget('zii.widgets.CMenu',array( 'items'=>array( array('label'=>'Home', 'url'=>array('javascript:void(0);')),), )); ?>
but its not working...
only 'url'=> 'javascript:void(0);' without using array

Yii framework How to integrate login form in header that should be visible on every page ,

I have three module 1 ) client 2 ) producer and search , I want to show login form in header
Login form is for producer , means producer can login
themes\mytheme\views\layouts
<div id=weppr>
<div class=fr header-right>
<?php $form=$this->beginWidget(CActiveForm, array(
id=>login-form,
enableClientValidation=>true,
clientOptions=>array(
validateOnSubmit=>true,
),
));
echo $form->textField($model,username,array(placeholder=>Enter Email,class=>login-input));
echo $form->passwordField($model,password,array(placeholder=>Enter Password,class=>login-input));
echo CHtml::submitButton(Login,array(class=>login-button));
$this->endWidget();
<div>
<?php echo $content; ?>
</div>
It gives error ,
Is possible to put in main.php , Is it acceptable coding , If not please how to do , and how to integrate login page that should be visible on every page with different module
I think you should try something like this:
LoginWidget.php
<?php class LoginWidget extends CWidget {
public function run() {
$model = new LoginFormModel;
$form= $this->beginWidget('CActiveForm', array(
'id'=>'login-form',
'action'=>array('site/login'),
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
)
));
echo $form->textField($model,'username',array('placeholder'=>'Enter Email',class=>'login-input'));
echo $form->passwordField($model,'password',array('placeholder'=>'Enter Password',class=>'login-input'));
echo CHtml::submitButton('Login',array(class=>'login-button'));
$this->endWidget();
} } ?>
In your Layout File:
<?php $this->widget('LoginWidget'); ?>
That should do it!

Yii uploading pictures

I'm a new to yii, so I was following this tutorial.
when I try to upload picture it reports empty field even if it is not.
my _form view:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'picture-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array('enctype' => 'multipart/form-data'),
));
?>
...
<div class="row">
<?php echo $form->labelEx($model,'path_to'); ?>
<?php echo $form->fileField($model,'path_to'); ?>
<?php echo $form->error($model,'path_to'); ?>
</div>
...
<?php $this->endWidget(); ?>
</div><!-- form -->
and here is my action method:
public function actionCreate()
{
$model=new Picture;
if(isset($_POST['Picture']))
{
$model->attributes=$_POST['Picture'];
$model->picture=CUploadedFile::getInstance($model,'path_to');
if($model->save()){
$log->lwrite('in save'.$model->picture);
$model->picture->saveAs(Yii::app()->basePath.'/../images/'.$model->picture);
$this->redirect(array('view','id'=>$model->id));
$log->lclose();
}
}
$this->render('create',array('model'=>$model,));
}
when I print_r($_FILES) everything what should be there is there
when I print_r($_POST) the field 'path_to' is empty and the validator probably is picking that one.
I'm probably missing something here and I'm clueless.
update1:
I've noticed yii is using hidden field with the same name as file input, than attributes are read from $_POST, which is causing the engine reading empty hidden field.
I understand that the hidden field is there for update when user is not entering new picture.
Can anyone advice what is the best way of doing picture upload?
update2:
model code:
class Picture extends CActiveRecord
{
public $picture;
...
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('path_to, page_id', 'required'),
array('page_id', 'numerical', 'integerOnly'=>true),
array('alt_text', 'safe'),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array('id, alt_text, path_to, page_id', 'safe', 'on'=>'search'),
//array('path_to', 'file','types'=>'jpg, gif, png', 'allowEmpty'=>true, 'on'=>'update'),
//array('path_to', 'length', 'max'=>255, 'on'=>'insert,update'),
array('path_to', 'unsafe'),
);
}
...
Best!
I think because you've declared 'path_to' to be unsafe in your rules, the massive assignment line:
$model->attributes=$_POST['Picture'];
Will fail, which will then cause the rule validation to fail. Change your rules to allow for path_to to be safe, and you should be good to go . . .
It also appears you're requiring a page_id, which I'm not seeing in your form.
_form code for file upload field :
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'post-form',
'enableAjaxValidation'=>false,
'htmlOptions' => array('enctype' => 'multipart/form-data'),
)); ?>
<div class="row">
<?php echo $form->labelEx($model, 'image');?>
<?php echo $form->fileField($model, 'image'); ?>
<?php echo $form->error($model, 'image'); ?>
</div>
<?php $this->endWidget(); ?>
Controller Code:
public function actionCreate()
{
$model=new Post;
if(isset($_POST['Post']))
{
$model->attributes=$_POST['Post'];
$uploadedFile=CUploadedFile::getInstance($model,'image');
$fileName = $uploadedFile;
$model->image = $fileName;
if($model->save()){
$uploadedFile->saveAs('C:/Program Files/Apache Group/Apache2/htdocs'.Yii::app()->baseUrl.'/images/thumbnails/'.$fileName);
$this->redirect(array('view','id'=>$model->id));
}
}
$this->render('create',array(
'model'=>$model,
));
}
diplay view code :
<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$model->search(),
'ajaxUpdate' => false,
'columns'=>array(
array(
'name'=>'Thumbnail',
'value'=>array($model,'showThumbnail'), // function in model
'type'=>'html',
'htmlOptions'=>array('class'=>'thumbnail'),
),
)
));
?>
model code :
place this function in ur model :
public function showThumbnail($data){
$path = $data->image;
return CHtml::image(Yii::app()->baseUrl.'/images/thumbnails/'.$path); // same path as ur uploaded file path
}