Cake Bake issue with views using cakephp3.0 - cakephp

I am new to cakephp framework and i am using cakephp3.0 now i used baking concept instead of using scaffolding. After baking it automatically generated all pages based on my tables in database and it generated code in models,controllers and views.Now my question is "if it is possible to change the code in views to change field types (from text box to radio button) according to my requirements."
Please help me.
Thanks in advance

Yes, after you bake your project you can change the fields types. Navigate to the folder where all your views are located, for example: app\View\MyViewName. Baking is a great tool to get something up and running fast. If you have a fairly structured website mostly used for data entry this is a great tool. I used it for simple data entry websites and it has saved me so much typing! Just add some data validation/constraints in the model and you're good to go!
A freshly baked view will look a little something like this:
<div class="MyForm Form">
<?php echo $this->Form->create('MyForm'); ?>
<fieldset>
<legend><?php echo __('Add My Form'); ?></legend>
<?php
echo $this->Form->input('field1');
echo $this->Form->input('field2');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
<div class="actions">
<h3><?php echo __('Actions'); ?></h3>
<ul>
<li><?php echo $this->Html->link(__('List My Forms'), array('action' => 'index')); ?></li>
</ul>
</div>
Change the input methods to look something like this:
$options = array('Y' => 'Yes', 'N' => 'No');
echo $this->Form->radio('myFields', $options);

Related

How can I use the same form in multiple views

I am using CakePHP 2.4. I have a blog where I can add and edit posts. When I implemented my edit.ctp, I recognized, that I have the same code in the view add.ctp:
<?php
echo $this->Form->create();
echo $this->Form->input('headline');
echo $this->Form->input('text', array('type' => 'textarea');
echo $this->Form->end('Save');
?>
(simplified code)
Regarding CakePHP´s recommendation, I want to keep my code DRY. What is the best way to define the form only one time and use it in both views?
Create a view in the folder Element with the form code
// app/View/Elements/postForm.ctp
<?php
echo $this->Form->create();
echo $this->Form->input('headline');
echo $this->Form->input('text', array('type' => 'textarea');
echo $this->Form->end('Save');
?>
Then include it in your desired views
echo $this->element('postForm');

cakephp select field of relationed elements for show in a view

I have this in cakephp, I try choose the field to be displayed in the combobox when creating related data in cake php.
<?php echo $this->Form->create('Round'); ?>
<fieldset>
<legend><?php echo __('Add Round'); ?></legend>
<?php
echo $this->Form->input('description');
echo $this->Form->input('text_marked');
echo $this->Form->input('project_id');
echo $this->Form->input('User');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
I try select one project with project_title, in the table project, not by 'project_id'. Title are not unique but is more descriptive than id. Can I do this in cake php?
The answer was easy,Thus we choose the field to display in the other views that are associated. it was put:
public $displayField = 'titte'
in the Round model.

How do i use batch insert in yii

Please i need a big help here. AM developing a yii application where i have to loop through my form and do a batch insert. I found bacth update in yii but ive not been able to see how to do batch insert and validation. Please help.
Here is my View:
<?php for($i=0;$i< $this->getDisplayArchModel();$i++) {?>
<FIELDSET class="radios">
<div class="row">
<?php echo $form->labelEx($model,'competency_type'); ?>
<?php echo $form->textField($model,'competency_type'); ?>
<?php echo $form->error($model,'competency_type'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'definition'); ?>
<?php echo $form->textArea($model,'definition'); ?>
<?php echo $form->error($model,'definition'); ?>
</div>
</fieldset>
<?php } ?>
Controller ::
public function actionDisplayArchModel()
{
$validateCat = $this->getDisplayArchModel();
if($validateCat == NULL)
$this->redirect(array('architecture'));
$model = new CompetencyType;
if(isset($_POST['CompetencyType']))
{
$model->attributes = $_POST['CompetencyType'];
if($model->validate()){
foreach($_POST['CompetencyType'] as $value)
{
echo $value;
}
}
}
$this->render('displayArchModel' ,array('model'=>$model));
}
Sometimes we want to collect user input in a batch mode. That is, the user can enter the information for multiple model instances and submit them all at once. We call this tabular input because the input fields are often presented in an HTML table.
To work with tabular input, we first need to create or populate an array of model instances, depending on whether we are inserting or updating the data. We then retrieve the user input data from the $_POST variable and assign it to each model. A slight difference from single model input is that we retrieve the input data using $_POST['ModelClass'][$i] instead of $_POST['ModelClass'].
more on collecting Tabular Input

'Notice (8): Undefined index' in the view when looping through 'containable' results

I'm using containable to pull associated records into the view action and am getting an error message when looping through results.
Also, I'm using a 'sluggable' behaviour, so the find operation has a condition to search by this variable.
When I debug the find variable in the view, I do see the correct records. But when I try and loop through them in the view I get the 'Notice (8): Undefined index: error.' Ideally I liked to understand how to trouble shoot this error since it happens occasionally.
The model setup is:
tournaments have many tournamentDetails
tournamentDetails have many updates
The records I'm trying to display are:
tournament->tournamentDetails->updates
The tournament controller looks like this:
$tournament = $this->Tournament->find('first', array(
'conditions' => array( 'slug' => $slug),
'contain' => array(
'TournamentDetail' => array(
'Update' => array('order' => 'Update.id DESC'),
))));
The tournament view action looks like this:
<?php foreach ($tournament ['Update'] as $update): ?>
<h3>Update: <?php echo $update ['Update']['date']; ?></h3>
<h4><?php echo $update['Update']['title']; ?></h4>
<p><?php echo $update ['Update']['body']; ?></p>
<hr/>
<?php endforeach; ?>
The 'update' data in the view when in debug looks like:
[Update] => Array
(
[0] => Array
(
[id] => 2
[title] => Indoor Challenge
[date] => 2010-03-19
[body] => Congratulations 2010 Champion
[tournament_detail_id] => 4
[homeStatus] => no
)
[1] => Array
(
[id] => 1
[title] => first round matches start today
[date] => 2010-03-19
[body] => this tournament's first round matches start today.
[tournament_detail_id] => 4
[homeStatus] => no
)
Is there something really obvious that I'm overlooking when looping through the 'updates' ?
Thanks, Paul
Resolution
Thanks everyone for the input. After taking a few steps back it occured to me what was happening with the 'undefined index' and comments about how to loop.
The problem was that the foreach loop wasn't nested, it only looped on the first level of association. The forearch loop deal with 'tournaments' which have many 'tournamentDetails'.
The loop needed to go one level deeper to 'tournamentDetails that have many 'updates'.
Here's the code that resolved this in the view.
<?php foreach ($tournament['TournamentDetail'] as $tournamentDetail): ?>
<?php foreach ($tournamentDetail ['Update'] as $update): ?>
<h3>Update: <?php echo $update['date']; ?></h3>
<h4><?php echo $update['title']; ?></h4>
<p><?php echo $update['body']; ?></p>
<hr/>
<?php endforeach; ?>
<?php endforeach; ?>
If others are looking to understand how to use the containable behavior with more than one level of association, just remember that you may have to have nested foreach loops in the view to display the results you're after.
Cheers, Paul
Paul,
given that the other things are right, could it be that you are mixing singular, plural, uppercase and lowercase? In particular the update/updates in various combinations.
Edit 0:
Quick shot?:
There simply is no such index defined, notice that you are working with an array consisting of arrays. It seems you have to use another loop nested in the first.
Edit 1:
Unfortunately, I can only provide quite generic help, as I do not sit infront of your code.
From your post and comments, I would guess that some variable names got mixed up. Just going over the whole dataflow normally does it. What is the exact variable name in the controller which delivers the correct data? If there is one, is it properly set from the controller to the view? Does the view address it correctly.
You are thinking great, this is what I did the last week, but I am quite sure that should do it. Clean out all the view code which currently makes use of any variables from the controller, proceed as described above keeping the dataflow in mind (but do not spend more than one hour on this).
If it does not work:
Something is foobared. Before you spend another week in despair, I would
try it without the containable behavior, see if it works
try to set up exactly the
same scenario in a completely new
CakePHP environment (in your case
1.2.5), see if it works
If you achieve your goals, try to see what went wrong in the original (often a face slapping moment).
If not:
try to see if there is a known bug
consider upgrading (or try to achieve your goals in 1.3.7 first)
Good luck, Benjamin
I think i understand you problem and please Try looping in this way
<?php foreach ($tournament ['Update'] as $update): ?>
<h3>Update: <?php echo $update['date']; ?></h3>
<h4><?php echo $update['title']; ?></h4>
<p><?php echo $update['body']; ?></p>
<hr/>
<?php endforeach; ?>
RSK's answer should be right, so since it's still not working you're probably not giving all the information needed. What does this output:
debug($tournament); ?
This all assumes your debug information is debug( $tournament ) and not debug( $update )
/* your old code */
<?php foreach ($tournament ['Update'] as $update): ?>
<h3>Update: <?php echo $update ['Update']['date']; ?></h3>
<h4><?php echo $update['Update']['title']; ?></h4>
<p><?php echo $update ['Update']['body']; ?></p>
<hr/>
<?php endforeach; ?>
If the debug value you provided was a debug of the $tournament variable then the first part of your loop simply assigns the numerically keyed arrays inside of the tournaments variable to the $update value.
So, when you send $tournament[ 'Update' ] through the loop you are getting a structure in the $update array like the following.
array(
[id] => 2
[title] => Indoor Challenge
[date] => 2010-03-19
[body] => Congratulations 2010 Champion
[tournament_detail_id] => 4
[homeStatus] => no
)
But in your loop you are trying to access the keyed values as if they exist under an additional layer keyed with 'Update'. That key does not exist in your interior array.
So if my assumption is right - your loop should look like:
/* your old code with edits removing the additional interior Update key */
<?php foreach ($tournament ['Update'] as $update): ?>
<h3>Update: <?php echo $update['date']; ?></h3>
<h4><?php echo $update['title']; ?></h4>
<p><?php echo $update['body']; ?></p>
<hr/>
<?php endforeach; ?>
There also seemed to be some spacing in your brackets in the original code - I don't know if this is an issue or not but it looked odd to me.
Resolution
Thanks everyone for the input. After taking a few steps back it occurred to me what was happening with the 'undefined index' and comments about how to loop.
The problem was that the foreach loop wasn't nested, it only looped on the first level of association. The forearch loop deal with 'tournaments' which have many 'tournamentDetails'.
The loop needed to go one level deeper to 'tournamentDetails that have many 'updates'.
Here's the code that resolved this in the view.
<?php foreach ($tournament['TournamentDetail'] as $tournamentDetail): ?>
<?php foreach ($tournamentDetail ['Update'] as $update): ?>
<h3>Update: <?php echo $update['date']; ?></h3>
<h4><?php echo $update['title']; ?></h4>
<p><?php echo $update['body']; ?></p>
<hr/>
<?php endforeach; ?>
<?php endforeach; ?>
If others are looking to understand how to use the containable behavior with more than one level of association, just remember that you may have to have nested foreach loops in the view to display the results you're after.
Cheers, Paul

how to create form in cake php

I am very new in cake php, i want to know how to create form in cake php,please describe,when we go to create a form then what i have to do,like create model and controller everything
In the view file, something like this would work:
<?php
echo $this->Form->create();
echo $this->Form->input('firstname', array('label' => 'Enter your first name:'));
echo $this->Form->input('email', array('label' => 'Enter your email address:'));
echo $this->Form->input('password', array('label' => 'Enter your password:'));
echo $this->Form->end('Save');
?>
In your controller:
if($this->request->is('post')){
$this->User->save( $this->request->data );
}
You can apply some sort of validation in your model, look in the documentation for that.
Best option to learn about cakephp is it's own doc book
But I'm providing you some basic code to create form :
$this->Form->create('ModelName');
$this->Form->input('ModelName.fieldname', array('type'=>'text', 'label'=>'Modified-Name'));
$this->Form->end(__('Submit'));
Here array('type'=>'text'...): type shows which type of input field you want.
(...'label'=>'Modified-Name'): By default it shows field text as fieldname but by using 'label' you can modify your field text.
$this->form->create('controlpage',
array(
'action'=>'controll',
'class'=>'class',
'enctype' => 'multipart/form-data',
'onsubmit'=>'return valid()'
));
Block quote
Create form in html save it as ctp
Block quote
And call it in view. enter code hereUse cake php book to read further.

Resources