Join the social network of Tech Nerds, increase skill rank, get work, manage projects...
 
  • Cakephp 2: Generate custom method and view for baking

    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 0
    • 381
    Comment on it

    Generate custom method and view in Cakephp using bake method

    As all we know that baking is the best and powerful method provided by cakephp for developing CRUD methods . It helps the developers to develop the website very easily and faster. Currently cakephp bakes CRUD method and generates following function in the Controller:

     

    i) public function index()

    ii) public function create()

    iii) public function edit($id=null)

    iv) public function delete($id=null)

     

    Now if you want to generate custom method and view for it then you can do this writing the following command in terminal (Ubuntu) or command prompt in Windows:

     

    cake bake view users customfunction

     

    In order to bake custom views, you need to create a template in the following directory of cakephp project:

    YOUR_CAKEPHP_PROJECT\lib\Cake\Console\Templates\default\views

    In this directory create customfunction.ctp file and you can create your own view . For example:

     

    <div class="<?php echo $pluralVar; ?> view">
    <h2><?php echo "<?php echo __('{$singularHumanName}'); ?>"; ?></h2>
    	<dl>
    <?php
    foreach ($fields as $field) {
    	$isKey = false;
    	if (!empty($associations['belongsTo'])) {
    		foreach ($associations['belongsTo'] as $alias => $details) {
    			if ($field === $details['foreignKey']) {
    				$isKey = true;
    				echo "\t\t<dt><?php echo __('" . Inflector::humanize(Inflector::underscore($alias)) . "'); ?></dt>\n";
    				echo "\t\t<dd>\n\t\t\t<?php echo \$this->Html->link(\${$singularVar}['{$alias}']['{$details['displayField']}'], array('controller' => '{$details['controller']}', 'action' => 'view', \${$singularVar}['{$alias}']['{$details['primaryKey']}'])); ?>\n\t\t\t&nbsp;\n\t\t</dd>\n";
    				break;
    			}
    		}
    	}
    	if ($isKey !== true) {
    		echo "\t\t<dt><?php echo __('" . Inflector::humanize($field) . "'); ?></dt>\n";
    		echo "\t\t<dd>\n\t\t\t<?php echo h(\${$singularVar}['{$modelClass}']['{$field}']); ?>\n\t\t\t&nbsp;\n\t\t</dd>\n";
    	}
    }
    ?>
    	</dl>
    </div>
    <div class="actions">
    	<h3><?php echo "<?php echo __('Actions'); ?>"; ?></h3>
    	<ul>
    <?php
    	echo "\t\t<li><?php echo \$this->Html->link(__('Edit " . $singularHumanName ."'), array('action' => 'edit', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?> </li>\n";
    	echo "\t\t<li><?php echo \$this->Form->postLink(__('Delete " . $singularHumanName . "'), array('action' => 'delete', \${$singularVar}['{$modelClass}']['{$primaryKey}']), array('confirm' => __('Are you sure you want to delete # %s?', \${$singularVar}['{$modelClass}']['{$primaryKey}']))); ?> </li>\n";
    	echo "\t\t<li><?php echo \$this->Html->link(__('List " . $pluralHumanName . "'), array('action' => 'index')); ?> </li>\n";
    	echo "\t\t<li><?php echo \$this->Html->link(__('New " . $singularHumanName . "'), array('action' => 'add')); ?> </li>\n";
    
    	$done = array();
    	foreach ($associations as $type => $data) {
    		foreach ($data as $alias => $details) {
    			if ($details['controller'] != $this->name && !in_array($details['controller'], $done)) {
    				echo "\t\t<li><?php echo \$this->Html->link(__('List " . Inflector::humanize($details['controller']) . "'), array('controller' => '{$details['controller']}', 'action' => 'index')); ?> </li>\n";
    				echo "\t\t<li><?php echo \$this->Html->link(__('New " . Inflector::humanize(Inflector::underscore($alias)) . "'), array('controller' => '{$details['controller']}', 'action' => 'add')); ?> </li>\n";
    				$done[] = $details['controller'];
    			}
    		}
    	}
    ?>
    	</ul>
    </div>
    <?php
    if (!empty($associations['hasOne'])) :
    	foreach ($associations['hasOne'] as $alias => $details): ?>
    	<div class="related">
    		<h3><?php echo "<?php echo __('Related " . Inflector::humanize($details['controller']) . "'); ?>"; ?></h3>
    	<?php echo "<?php if (!empty(\${$singularVar}['{$alias}'])): ?>\n"; ?>
    		<dl>
    	<?php
    			foreach ($details['fields'] as $field) {
    				echo "\t\t<dt><?php echo __('" . Inflector::humanize($field) . "'); ?></dt>\n";
    				echo "\t\t<dd>\n\t<?php echo \${$singularVar}['{$alias}']['{$field}']; ?>\n&nbsp;</dd>\n";
    			}
    	?>
    		</dl>
    	<?php echo "<?php endif; ?>\n"; ?>
    		<div class="actions">
    			<ul>
    				<li><?php echo "<?php echo \$this->Html->link(__('Edit " . Inflector::humanize(Inflector::underscore($alias)) . "'), array('controller' => '{$details['controller']}', 'action' => 'edit', \${$singularVar}['{$alias}']['{$details['primaryKey']}'])); ?></li>\n"; ?>
    			</ul>
    		</div>
    	</div>
    	<?php
    	endforeach;
    endif;
    if (empty($associations['hasMany'])) {
    	$associations['hasMany'] = array();
    }
    if (empty($associations['hasAndBelongsToMany'])) {
    	$associations['hasAndBelongsToMany'] = array();
    }
    $relations = array_merge($associations['hasMany'], $associations['hasAndBelongsToMany']);
    foreach ($relations as $alias => $details):
    	$otherSingularVar = Inflector::variable($alias);
    	$otherPluralHumanName = Inflector::humanize($details['controller']);
    	?>
    <div class="related">
    	<h3><?php echo "<?php echo __('Related " . $otherPluralHumanName . "'); ?>"; ?></h3>
    	<?php echo "<?php if (!empty(\${$singularVar}['{$alias}'])): ?>\n"; ?>
    	<table cellpadding = "0" cellspacing = "0">
    	<tr>
    <?php
    			foreach ($details['fields'] as $field) {
    				echo "\t\t<th><?php echo __('" . Inflector::humanize($field) . "'); ?></th>\n";
    			}
    ?>
    		<th class="actions"><?php echo "<?php echo __('Actions'); ?>"; ?></th>
    	</tr>
    <?php
    echo "\t<?php foreach (\${$singularVar}['{$alias}'] as \${$otherSingularVar}): ?>\n";
    		echo "\t\t<tr>\n";
    			foreach ($details['fields'] as $field) {
    				echo "\t\t\t<td><?php echo \${$otherSingularVar}['{$field}']; ?></td>\n";
    			}
    
    			echo "\t\t\t<td class=\"actions\">\n";
    			echo "\t\t\t\t<?php echo \$this->Html->link(__('View'), array('controller' => '{$details['controller']}', 'action' => 'view', \${$otherSingularVar}['{$details['primaryKey']}'])); ?>\n";
    			echo "\t\t\t\t<?php echo \$this->Html->link(__('Edit'), array('controller' => '{$details['controller']}', 'action' => 'edit', \${$otherSingularVar}['{$details['primaryKey']}'])); ?>\n";
    			echo "\t\t\t\t<?php echo \$this->Form->postLink(__('Delete'), array('controller' => '{$details['controller']}', 'action' => 'delete', \${$otherSingularVar}['{$details['primaryKey']}']), array('confirm' => __('Are you sure you want to delete # %s?', \${$otherSingularVar}['{$details['primaryKey']}']))); ?>\n";
    			echo "\t\t\t</td>\n";
    		echo "\t\t</tr>\n";
    
    echo "\t<?php endforeach; ?>\n";
    ?>
    	</table>
    <?php echo "<?php endif; ?>\n\n"; ?>
    	<div class="actions">
    		<ul>
    			<li><?php echo "<?php echo \$this->Html->link(__('New " . Inflector::humanize(Inflector::underscore($alias)) . "'), array('controller' => '{$details['controller']}', 'action' => 'add')); ?>"; ?> </li>
    		</ul>
    	</div>
    </div>
    <?php
    endforeach;
    ?>

     

     

    Now also create a function in the controller with the following name: customfunction in the following directory:

    YOUR_CAKEPHP_PROJECT\lib\Cake\Console\Templates\default\actions

    Now open controller_actions.ctp file and add a new function customfunction in it:

     

    public function <?php echo $admin ?>customfunction() {
    // Your logic goes here
    }

     

    If you don't want the customfunction to be universal and want to use it in the specific controller then you can directly write it into that controller.

     

    Thanks for reading.

 0 Comment(s)

Sign In
                           OR                           
                           OR                           
Register

Sign up using

                           OR                           
Forgot Password
Fill out the form below and instructions to reset your password will be emailed to you:
Reset Password
Fill out the form below and reset your password: