Yii 2 - radioList Template - php

I want to add template to radioList in yii2, which I tried, but I am unable to get the proper o/p.
The HTML is
<div class="input-wrap">
<label class="gender-head">Gender</label>
<label class="signup-radio">
<input type="radio" name="signup-gender" id="signupMale" checked tabindex="3" />
<i></i>
<span>Male</span>
</label>
<label class="signup-radio">
<input type="radio" name="signup-gender" id="signupFemale" tabindex="3" />
<i></i>
<span>Female</span>
</label>
</div>
The o/p should look like this
The Yii2 code which I tried is...
<div class="input-wrap">
<div class="clearfix">
<?= $form->field($model, 'gender', ['radioTemplate' => '<label class="gender-head">{label}</label><label class="signup-radio">{input}</label>'])->inline()->radioList([1 => 'Male', 0 => 'Female'], ['separator' => '', 'tabindex' => 3]); ?>
</div>
<div class="help-block"></div>
</div>
I have searched a lot on the template but did not get any proper response.

I finally got the way through which we can modify the input tag generation logic in Yii2
To get the above result of the radio buttons, I have developed the following code
<div class="input-wrap">
<div class="clearfix" id="UserLogin-gender">
<label class="radio-head">Gender</label>
<?=
$form->field($model, 'gender')
->radioList(
[1 => 'Male', 0 => 'Female'],
[
'item' => function($index, $label, $name, $checked, $value) {
$return = '<label class="modal-radio">';
$return .= '<input type="radio" name="' . $name . '" value="' . $value . '" tabindex="3">';
$return .= '<i></i>';
$return .= '<span>' . ucwords($label) . '</span>';
$return .= '</label>';
return $return;
}
]
)
->label(false);
?>
</div>
<div class="help-block"></div>
</div>
The "item" option in the radioList is a callback function to the input generation logic written in Yii2. We can easily modify the layout of each element generated using this callback function and it's parameters.

maybe i'am too late but you can try this
<?= $form->field($model, 'abc')->inline()->radioList(['example1' => 'example1', 'example2' => 'example2'])->label(false) ?>
Source

$form->field($model, 'gender')
->radioList(array(1 => 'Male', 0 =>'Female'), array('class' => 'i-checks'));

Related

write PHP inside HTML inside PHP

in trying to put in php code inside html that inside php,
my goal is to full this select option with an array
<?php
$wcr=array(
'Angola',
'Antigua & Barbuda',
'Armenia',
'Austria',
'Azerbaijan',
);
$content = '<div class="row">
<form role="form">
<div class="form-group">
<label for="exampleInputName1">Name</label>
<select name="country"><option selected value="">'
<? $p=1;asort($wcr);reset($wcr);
while (list ($p, $val) = each ($wcr)) {
echo '<option value="'.$p.'">'.$val;
} ?>
'</select>
</div>
<input type="button" class="btn btn-primary" onClick="AddDoctor()"
value="Submit"></input>
</form>
</div>';
?>
i tried a different approach but nothing seems to work
Your PHP isn't inside the HTML. You ended the quoted string, so you're still in PHP execution mode, you don't need <?php again.
The loop shouldn't use echo, it should append to the $content string.
Also, each() has been deprecated, you should use a foreach loop.
<?php
$wcr=array(
'Angola',
'Antigua & Barbuda',
'Armenia',
'Austria',
'Azerbaijan',
);
$content = '<div class="row">
<form role="form">
<div class="form-group">
<label for="exampleInputName1">Name</label>
<select name="country"><option selected value="">';
asort($wcr);
foreach ($wcr as $p => $val) {
$content .= '<option value="'.$p.'">'.$val.'</option>';
}
$content .= '</select>
</div>
<input type="button" class="btn btn-primary" onClick="AddDoctor()"
value="Submit"></input>
</form>
</div>';
?>

Laravel trying to add to database

I'm new on Laravel framework. I'm trying to save from forms to database.
Example:
Input STEAM_ID:
Input Access:
Controller:
public function admins_add()
{
$serveradmins = DB::table('server_admins')->first();
$this->title('Add admins');
$this->pageView('servers::admins_add', ['serveradmins' => $serveradmins]);
DB::table('server_admins')->insert(
array(
$serveradmins->auth = Input::get('steam-id'),
$serveradmins->access = Input::get('access'),
$serveradmins->password = 'nopass',
$serveradmins->flags = 'ce',
$serveradmins->added_by = Input::get('added_by')
)
);
$serveradmins->save();
return Redirect::back();
}
Views:
<div class="page page-servers page-servers-admin-form">
<form method="POST" action="/admin/servers/admins/create" accept-charset="UTF-8" class="form-horizontal">
<div class="form-group ">
<label for="title" class="col-sm-3 control-label">STEAM ID</label>
<div class="col-sm-9">
<input name="steam-id" type="text" id="steam-id">
</div>
</div>
<div class="form-group ">
<label for="access" class="col-sm-3 control-label">Teisės</label>
<div class="col-sm-9">
<input name="access" type="hidden" value="" id="access">
<select id="access" name="access"><option value="" selected="selected">-</option>
<option value="abcdefghijklmnopqrstuv">Owner</option>
<option value="bcdfijmnopqruv">Admin</option>
<option value="3" disabled>PREMIUM</option>
</select>
</div>
</div>
<div class="form-actions">
<button type="submit" name="_form_submit" class="btn btn-default" value="1">
<i class="fas fa-save "></i>
SAVE!
</button>
<button type="button" onclick="document.location.href='/admin/servers/admins'" class="btn btn-default">
<i class="fas fa-times "></i> Cancel
</button>
</div>
</form>
</div>
</section>
And my routes:
ModuleRoute::get('admin/servers/admins/create', 'AdminServersController#admins_add');
ModuleRoute::post('admin/servers/admins/create', 'AdminServersController#admins_add');
Dont be mad on my if my code is terrible, i'm new on laravel and really like it! Thanks guys for helping :)
First: Why do you want to execute admins_add() in your get route? Create a function called index() for easier understanding and tell that function to return the view like
public function index() {
$serveradmins = DB::table('server_admins')->first();
return view('viewname')->with('serveradmins', $serveradmins);
}
Then your admins_add()should look like this:
public function admins_add(Request $request)
{
ServerAdmin::create([
'auth' => $request->steam-id,
'access' => $request->access,
'password' => 'nopass',
'flags' => 'ce',
'added_by' => $request->added_by
]);
return Redirect::back();
}
And before executing generate the ServerAdmin Model via CLI ( php artisan make:model ServerAdmin) and inside this model you change the fillables to
protected $fillable = [
'auth',
'access',
'password',
'flags',
'added_by'
];
and set
protected $table = 'server_admins';
Edit: As N Mahurin mentioned in the comments - take this solution for practicing with Laravel. Mass Assignments have a heavy security risk. Read here about it:
https://laravel.com/docs/5.6/eloquent#mass-assignment
Your insert is off. It should be key => value pairs (where the key is the column name in the DB). Try
DB::table('server_admins')->insert([
'auth' => Input::get('steam-id'),
'access' => Input::get('access'),
'password' => 'nopass',
'flags' => 'ce',
'added_by' => Input::get('added_by')
]);
See https://laravel.com/docs/5.6/queries#inserts for more info. You can also go the eloquent route and do:
$serverAdmin = new ServerAdmin();
$serverAdmin->auth = Input::get('steam-id'),
$serverAdmin->access = Input::get('access'),
$serverAdmin->password = 'nopass',
$serverAdmin->flags = 'ce',
$serverAdmin->added_by = Input::get('added_by')
$serverAdmin->save();

Store registration is not working properly (the code goes always to the else part of the "if ($validator->passes()) {...}"

I have a form in the registration.blade.php page for a user to enter some info to do a registration in a conference.
In the form below there is a part where is used the getHtmlInput() method, that is used to show for each ticket/registration type selected by the user the custom question(s) associated with that registration type for the user to answer. And adds the "required" attribute if in the registration_type_questions pivot table the question has the "required" column as "1".
If the user is doing a registration in a conference and the user didn't select ticket/registration type(s) that have custom questions associated the registration works fine, the code enters in the "if ($validator->passes()) {...}".
Issue:
The issue is when there are custom questions associated with one or more selected ticket/registration types.
If there are custom questions that are required I want to validate that also in Laravel. So I have the code below in the storeRegistration() that shows the message "Fill all mandatory fields" if a custom question that is required was not answered.
But even if the user fill all required custom questions the code never enters in the if "if ($validator->passes()) {...}". Do you know why? Also if the question is required and the required attribute is removed from the HTML in the console and the user click in the "Store Registration" the validation errors don't appear.
The code goes always to the else part of the if " "if ($validator->passes()) {...}" and it shows with "else{dd($validator->errors());}":
MessageBag {#278 ▼
#messages: array:1 [▼
"participant_question.0" => array:1 [▼
0 => "The participant question.0 field is required."
]
]
#format: ":message"
}
Do you know where is the issue?
The storeRegistrationInfo() that stores the registration and has the validation to check if custom question(s) required were not answered:
public function storeRegistration(Request $request, $id, $slug = null, Validator $validator)
{
$user = Auth::user();
$rules = [];
$messages = [];
if (isset($request->participant_question_required)) {
dd($request->participant_question_required);
$messages = [
'participant_question.*.required' => 'Fill all mandatory fields',
];
foreach ($request->participant_question_required as $key => $value) {
$rule = 'string|max:255'; // I think string should come before max
// if this was required, ie 1, prepend "required|" to the rule
if ($value) {
$rule = 'required|' . $rule;
}
$rules["participant_question.{$key}"] = $rule;
}
}
$validator = Validator::make($request->all(), $rules, $messages);
if ($validator->passes()) {
dd('test'); // this dont appears
// create an entry in the registrations table
// create an entry in the participants table for each registered participant
// create a entry in the answer table for each answer to a custom question
if (isset($request->participant_question)) {
foreach( $request->participant_question as $key => $question ) {
$answer = Answer::create([
'question_id' => $request->participant_question_id[$key],
'participant_id' => $participants[$key]->id,
'answer' => $request->participant_question[$key],
]);
}
}
}
}
If in the database the questions tables is like:
id question conference_id
1 Phone? 1
And in the database pivot table registration_type_questions is:
id registration_type_id question_id required
1 1 1 1
The generated HTML with the getHTMLInput() based on the values of the pivot table and Questions table above is:
<form method="post" id="registration_form" action="http://proj.test/conference/1/conference-test/registration/storeRegistration">
<input type="hidden" name="_token" value="">
<p> Is not necessary additional info for the registration. Please just answer the following questions. </p>
<input type="hidden" value="" name="participant_name[]">
<input type="hidden" value="" name="participant_surname[]">
<input type="hidden" name="rtypes[]" value="1">
<div class="form-group">
<label for="participant_question">Phone?</label>
<input type="text" name="participant_question" class="form-control" required="">
<input type="hidden" name="participant_question_required[]" value="1">
<input type="hidden" value="1" name="participant_question_id[]">
</div>
<input type="submit" class="btn btn-primary" value="Store Registration">
</form>
The method getHtmlInput() that generates the html is in the Question model:
public function getHtmlInput($name = "", $options = "", $required = false, $class = "", $customtype = false)
{
$html = '';
$html .= $customtype == 'checkbox' ? "<div class='checkbox-group ".($required ? " required" : "")."'>" : '';
$html .= $customtype == 'select_menu' ? "<select name='participant_question' class='form-control' " . ($required ? " required" : "")
. ">" : '';
if (empty($options)) {
switch ($customtype) {
case "text":
$html .= "
<input type='text' name='participant_question' class='form-control'" . ($required ? " required" : "")
. ">";
break;
case "file":
$html .= "
<input type='file' name='participant_question' class='form-control'" . ($required ? " required" : "") . ">";
break;
case "long_text":
$html .= "
<textarea name='participant_question' class='form-control' rows='3'" . ($required ? " required" : "") . ">"
. $name .
"</textarea>";
break;
}
} else {
foreach ($options as $option) {
switch ($customtype) {
case "checkbox":
$html .= "
<div class='form-check'>
<input type='checkbox' name='participant_question[]' value='" . $option->value . "' class='form-check-input' >
<label class='form-check-label' for='exampleCheck1'>" . $option->value . "</label>
</div>";
break;
case "radio_btn":
$html .= "
<div class='form-check'>
<input type='radio' name='participant_question[]' value='" . $option->value . "' class='form-check-input'" . ($required ? " required" : "") . ">" .
' <label class="form-check-label" for="exampleCheck1">' . $option->value . '</label>' .
"</div>";
break;
case "select_menu":
$html .= "<option value='" . $option->value . "'>" . $option->value . "</option>";
break;
}
}
}
$html .= $customtype == 'select_menu' ? "</select>" : '';
$html .= $customtype == 'checkbox' ? "</div>" : '';
return $html;
}
Form in the view that uses the getHtmlInput() to generate the html for the custom questions:
<div class="card-body">
#include('includes.errors')
<form method="post" id="registration_form" action="{{route('conferences.storeRegistration', ['id' => $id, 'slug' => $slug])}}">
{{csrf_field()}}
#if (!is_null($allParticipants) && is_int($allParticipants))
<!-- If all_participants in conferences table is "1"
is necessary to collect the name and surname of all participants -->
#if($allParticipants == 1)
<p>Please fill the following form.</p>
#else
<!-- if is 0 is not necessary to collect the name and surname of each participant
and its used the name and surname of the auth user to do the registration-->
<!-- the registration types selected by the user can have custom questions associated if don't have no
custom question will appear, if 1 or more registration types have custom questions associated they will
appear on the form for the user to answer-->
#if(collect($selectedRtypes)->first()['questions'] == null)
<p>Is not necessary additional info for the registration. </p>
#else
<p>Is not necessary additional info for the registration. Please just answer the following
questions.</p>
#endif
#endif
<!-- for each selected ticket is necessary collect the name and surname because all_participants is "1" inside this if -->
#foreach($selectedRtypes as $k => $selectedRtype)
#foreach(range(1,$selectedRtype['quantity']) as $val)
#if($allParticipants == 1)
<h6 class="text-heading-blue mb-3 pb-2 font-weight-bold">
Participant - {{$val}} - {{$k}}</h6>
<div class="form-group font-size-sm">
<label for="name{{ $k }}_{{ $val }}"
class="text-gray">Name</label>
<input type="text" id="name{{ $k }}_{{ $val }}"
name="participant_name[]" required
class="form-control" value="">
</div>
<div class="form-group font-size-sm">
<label for="surname{{ $k }}_{{ $val }}"
class="text-gray">Surname</label>
<input type="text" id="surname{{ $k }}_{{ $val }}"
required class="form-control"
name="participant_surname[]" value="">
</div>
<!-- for each registration type if there are custom questions thet will appear so the user can answer -->
#foreach($selectedRtype['questions'] as $customQuestion)
<div class="form-group">
<label for="participant_question">{{$customQuestion->question}}</label>
<!--if the custom question is a type checkbox, radio button or select menu-->
#if($customQuestion->hasOptions() && in_array($customQuestion->type, ['checkbox', 'radio_btn', 'select_menu']))
{!! $customQuestion->getHtmlInput(
$customQuestion->name,
$customQuestion->options,
($customQuestion->pivot->required == '1'),
'form-control',
$customQuestion->type)
!!}
<!-- if the custom question is of type text, file, textarea -->
#else
{!! $customQuestion->getHtmlInput(
$customQuestion->name,
[],
($customQuestion->pivot->required == '1'),
'form-control',
$customQuestion->type)
!!}
#endif
<input type="hidden"
name="participant_question_required[]"
value="{{ $customQuestion->pivot->required }}">
<input type="hidden"
value="{{ $customQuestion->id }}"
name="participant_question_id[]"/>
</div>
#endforeach
#else
<input type="hidden" value=""
name="participant_name[]"/>
<input type="hidden" value=""
name="participant_surname[]"/>
#endif
<input type="hidden" name="rtypes[]"
value="{{ $selectedRtype['id'] }}"/>
#endforeach
<!-- is not necessary collect info of each participant and its used the name and surname of the auth user
to do the registration -->
#if ($allParticipants == 0)
<!-- if the selected registration types have custom questions associated they will appear in the form
so the user can answer -->
#foreach($selectedRtype['questions'] as $customQuestion)
<div class="form-group">
<label for="participant_question">{{$customQuestion->question}}</label>
<!-- if the custom question is of type checkbox, radio button or select menu -->
#if($customQuestion->hasOptions() && in_array($customQuestion->type, ['checkbox', 'radio_btn', 'select_menu']))
{!! $customQuestion->getHtmlInput(
$customQuestion->name,
$customQuestion->options,
($customQuestion->pivot->required == '1'),
'form-control',
$customQuestion->type)
!!}
<!-- if the checkbox is of type text, textarea, file-->
#else
{!! $customQuestion->getHtmlInput(
$customQuestion->name,
[],
($customQuestion->pivot->required == '1'),
'form-control',
$customQuestion->type)
!!}
#endif
<input type="hidden"
name="participant_question_required[]"
value="{{ $customQuestion->pivot->required }}">
<input type="hidden"
value="{{ $customQuestion->id }}"
name="participant_question_id[]"/>
</div>
#endforeach
#endif
#endforeach
#endif
<input type="submit" class="btn btn-primary" value="Store Registration"/>
</form>
</div>
$rules before "$validator = Validator::make($request->all(), $rules);" shows:
array:1 [▼
"participant_question.0" => "required|string|max:255"
]
request->all() before "$validator = Validator::make($request->all(), $rules); "shows:
array:7 [▼
"_token" => ""
"participant_name" => array:1 [▼
0 => null
]
"participant_surname" => array:1 [▼
0 => null
]
"rtypes" => array:1 [▼
0 => "1"
]
"participant_question" => "j"
"participant_question_required" => array:1 [▼
0 => "1"
]
"participant_question_id" => array:1 [▼
0 => "1"
]
According to the documentation:
If you do not want to use the validate method on the request, you may create a validator instance manually using the Validator facade. The make method on the facade generates a new validator instance:
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
if ($validator->fails()) {
return redirect('post/create')
->withErrors($validator)
->withInput();
}
// Store the blog post...
}
They don't seem to be passing the Validator as a parameter as you are, rather they are statically calling the function without any reference to the request or any other parameters.
Secondly, consider using the nullable validation flag which allows you to define optional fields.
We have a pass method there :
$rules = ['name' => 'unique'];
$input = ['name' => null];
Validator::make($input, $rules)->passes(); // true
So define your rules and number of inputs and give it a go.
You can use dd(Validator::make($input, $rules)->passes();) it will give you true or false, False for not failed validation and true for pass validation.
Further use it like so :
if(Validator::make($input, $rules)->passes(); // true){
//On pass validation, This section will execute
}

get checked option value in laravel

I have input group include 2 options checkbox and input field.
I want to get value of input field only if checkbox is checked
otherwise ignore that input field.
Codes
#foreach($list as $columns)
<div class="input-group">
<span class="input-group-addon">
<input type="checkbox" checked="checked">
</span>
<input type="text" name="{{$columns}}" value="{{$columns}}" class="form-control">
</div><!-- /input-group -->
#endforeach
currently I get all my inputs in my controller regardless they are checked or not:
$column = $request->except('_token');
How do I pass this to my controller function?
UPDATE
as requested : my code $list dd is:
array:27 [▼
0 => "id"
1 => "title"
2 => "slug"
3 => "imageOne"
4 => "imageTwo"
5 => "short_description"
6 => "description"
7 => "price"
8 => "meta_description"
9 => "meta_tags"
10 => "arrivalDays"
11 => "height"
12 => "weight"
13 => "lenght"
14 => "width"
15 => "sku"
16 => "stock"
17 => "label"
18 => "label_from"
19 => "label_to"
20 => "label_color"
21 => "status_id"
22 => "brand_id"
23 => "category_id"
24 => "subcategory_id"
25 => "created_at"
26 => "updated_at"
]
UPDATE 2
To be clear how it works exactly i included screenshot
SEE IT
1) change the name of checkbox to cb[] and input to input[]
#php
$no = 0;
#endphp
#foreach($list as $columns)
#php
$no+=1;
#endphp
<div class="input-group">
<span class="input-group-addon">
<input type="checkbox" name="cb[{{$no}}]" checked="checked">
</span>
<input type="text" name="input[{{$no}}]" value="{{$columns}}" class="form-control">
</div><!-- /input-group -->
#endforeach
2)filter your $request and include just the checked checkbox
$input = $request->except('_token');
foreach ($input['cb'] as $key => $value) {
if ($value== 'on') {
$getRealInput[$key] = $input['input'][$key];
}
}
return $getRealInput;
Try This:
1) first of all mention checkbox name like this :
#foreach($list as $columns)
<div class="input-group">
<span class="input-group-addon">
<input name="checkbox" type="checkbox" checked="checked">
</span>
<input type="text" name="{{$columns}}" value="{{$columns}}" class="form-control">
</div><!-- /input-group -->
#endforeach
2) In Controller try this:
$inputs = asset($request->checkbox) && $request->checkbox !='' ? $request->except('_token') : []; //if you want to remove input fields use unset inputs instead of []
dd($inputs)
You could name the checkbox as an array
#foreach($list as $columns)
<div class="input-group">
<span class="input-group-addon">
<input type="checkbox" name="cb[]" value="{{ $columns }}">
</span>
<input type="text" name="{{$columns}}" value="{{$columns}}" class="form-control">
</div><!-- /input-group -->
#endforeach
and in your controller you could get the checked items as
foreach ($request->cb as $checked) {
$request->{$checked} // The textbox corresponding to the selected checkbox
}
You should try this:
Updated Answer:
#foreach($list as $columns)
<div class="input-group">
<span class="input-group-addon">
<input type="checkbox" name="columns[]" value="{{ $columns }}">
</span>
<input type="text" name="{{$columns}}" value="{{$columns}}" class="form-control">
</div><!-- /input-group -->
#endforeach
In controller :
$columns = $request->columns;
print_r($columns);
First of all, identify each checkboxes with unique names(use columns[]).
Here I guess you don't expect manual entry(modification) as you populate the value of $columns in your text input field. If so, yoou could use a label instead:
#foreach($list as $key => $columns)
<div class="input-group">
<span class="input-group-addon">
<input name="columns[]" type="checkbox" value={{$key}} checked="checked">
</span>
<label class="form-control">{{$columns}}</label>
</div>
#endforeach
UPDATE:
VIEW
#foreach($list as $key => $columns)
<span class="input-group-addon">
<input name="col_keys[]" type="checkbox" value={{$key}} checked="checked">
</span>
<input type="text" name="col_texts[]" value="{{$columns}}" class="form-control">
#endforeach
CONTROLLER
Now $request->col_keys will have an array of keys that are valid for $request->col_texts. So do a sorting:
$valid_keys = $request->col_keys;
$all_texts = $reqest->col_texts;
foreach($all_texts as $key => $item) {
if (($key = array_search($key, $valid_keys)) === false) {
unset($all_texts($key));
}
}
SOLVED
First of all I have to thank everyone who tried to help me solve this issue specially Wahyu Fadzar. Here is how I solved my issue:
I changed my blade code to:
#php $no = 0; #endphp //Wahyu Fadzar idea
#foreach($list as $columns)
#php $no+=1; #endphp //Wahyu Fadzar idea
<div class="input-group">
<span class="input-group-addon">
<input type="checkbox" name="cb[{{$no}}]" checked="checked"> //Wahyu Fadzar idea
</span>
<input type="text" name="customname[{{$no}}]" value="{{$columns}}" //Wahyu Fadzar ideaclass="form-control">
<input type="hidden" name="defaultname[{{$no}}]" value="{{$columns}}"> // Added
</div><!-- /input-group -->
#endforeach
Controller
public function export(Request $request) {
// defaultname that i added in my blade used here (explaination below)
$input = $request->except('_token');
foreach ($input['cb'] as $key => $value) {
if ($value== 'on') {
$getRealInput[$key] = $input['defaultname'][$key];
}
}
$products = Product::select($getRealInput)->get(); //getting table selected columns
Excel::create('products', function($excel) use($products, $request) {
$excel->sheet('sheet 1', function($sheet) use($products, $request){
//Wahyu Fadzar code used here to get selected columns data
$input = $request->except('_token');
foreach ($input['cb'] as $key => $value) {
if ($value== 'on') {
$getCustomInput[$key] = $input['customname'][$key];
}
}
$sheet->fromArray($products, null, 'A1', false, false);
$sheet->row(1, $getCustomInput);
});
})->export('csv');
return redirect()->back();
}
Explanations
I had issue before when I used Wahyu code it would remove my inputs from CSV file as i unchecked them, but their data still exist in my file
so I added
< input type = " hidden " name = " defaultname[{{$no}}] " value = " {{$columns}} " >
and by this i will get my default column names even if i edit it for export. otherwise it would return error, eg. I changed my title column to name it says there is no column name! so by this my title column will stay title for select query.
I used it in:
$products = Product::select($getRealInput)->get();
I used Wahyu code in my export part in order to get custom input names for my CSV file and not the default ones.
< input type = " text " name = " customname[{{$no}}] " value = "
{{$columns}} " class = " form-control " >
goes to:
if ($value== 'on') {
$getCustomInput[$key] = $input['customname'][$key];
}
inside my export query.
Hope it help others as well.
THANK YOU ALL.

Styling form in Yii2 (ActiveField / ActiveForm)

I'm really struggling getting my layout into Yii2. To be as close as possible to the state-of-the-art, I read about styling the ActiveField and ActiveForm, which kinda works, but not to 100%. Maybe you see whats wrong.
Let me start of with my HTML, which I want to have:
// normal state without any validations
<p>
<label for="signup_name">Name, Surname:<span class="required">*</span></label>
<input type="text" name="signup_name" id="signup_name" value="" />
</p>
// input field after validation fails (ajax + reload)
<p>
<label for="signup_email">E-mail:<span class="required">*</span></label>
<input class="error-input" type="text" name="signup_email" id="signup_email" value="" />
<span class="error-msg">E-mail must be filled !</span>
</p>
This is the current state, in which the layout is in:
<p>
<label class="control-label" for="signupform-username">Username</label>
<input id="signupform-username" class="form-control" type="text" name="SignupForm[username]">
<span class="error-msg">Username may not be empty</span>
</p>
This is my PHP / Yii2-part
<?php
$form = ActiveForm::begin([
'id' => 'form-signup',
'fieldConfig' => [
'template' => "<p>{label}{input}{error}</p>",
'errorOptions' => [
'tag' => 'span',
'class' => 'error-msg',
],
],
]);
echo $form->field($model, 'username', [
'inputTemplate' => '{input}',
])->textInput(['autofocus' => false])
?>
The Problems:
The <span class="error-msg"> is always rendered, even though there is no error yet. To clarify: The span has no content and is rendered like this:
<span class="error-msg"></span> (I want it to be there if there IS actually an error, not as a placeholder before
I can't figure out on how to apply an error-class to the input, which works for the ajax-validation, as well as the not JS-way.
Any help is appreciated,
thanks
you can add class for each field if you want
<?= $form->field($model, 'title')->textInput(['class'=>'form-control'])->label('Your Label',['class'=>'label-class']) ?>
Try to disable ajax validation of input field.
echo $form->field($model, 'username', ['enableAjaxValidation' => false]);
or
echo $form->field($model, 'username', ['enableClientValidation' => false]);

Categories