ID is not the root of my problem. Figuring out how to call the correct
action and where that action should be located is where I am stuck.
-----Original Message-----
From: cake-php@googlegroups.com [mailto:cake-php@googlegroups.com] On Behalf
Of majna
Sent: Saturday, December 27, 2008 2:12 PM
To: CakePHP
Subject: Re: I am missing something obvious
This line iw wrong:
<td>
<?php echo $html->link('delete', 'ingredient_list/delete'); ?> </td> This
is link not button, Your delete() method expects id as param:
$html->link('delete', 'ingredient_list/delete/$id'); ($id or your $index)
On Dec 27, 7:11 pm, "rhythmicde...@gmail.com"
<rhythmicde...@gmail.com> wrote:
> I dont know why I cant wrap my head around this. I have been doing
> LAMP development for years yet CakePHP basics seem to be escaping me.
> So here it is. I am working on a recipe management application. A
> recipe's ingredient list is stored in the ingredients_list table. I am
> having an issue figuring out how to add another ingredient in the add
> recipe view and how to add or delete another ingredient in the edit
> recipe view.
>
> To add a new ingredient to the recipe I should just hit a button that
> adds a new line to the form with all the fields needed for the
> ingredient. I cant seem to figure out the right strategy using Cake. I
> can do it with Javascript but thats not really the point.
>
> To delete an ingredient there should be a button next to the line item
> in the recipe view that calls a delete method on the ingredient_list
> controller and then returns you to the recipe view that you were in.
> When I call the delete method on the ingredient I get the following
> from CakePHP:
>
> Missing Method in RecipesController
>
> Error: The action ingredient_list is not defined in controller
> RecipesController
>
> Error: Create RecipesController::ingredient_list() in file: app
> \controllers\recipes_controller.php.
>
> But I dont think that the delete method belongs there.
>
> Help is much appreciated thanks.
>
> Code.
>
> RECIPES CONTROLLER
>
> <?php
> class RecipesController extends AppController {
> /*
> Make sure that if you add another controller that you put the
> current controller
> in the array as well or it wont be found.
> */
>
> var $uses = array('Recipe', 'RecipeType', 'Ingredient',
> 'MeasurementType', 'IngredientList');
>
> function index()
> {
> $this->set('recipes', $this->Recipe->findAll());
> $this->pageTitle = 'Recipes';
> $this->layout = 'default';
> }
>
> function view($id = null)
> {
> $this->Recipe->id = $id;
> $this->set('recipe', $this->Recipe->read());
> }
>
> function add()
> {
> $this->set_recipe_types();
> $this->set_ingredients();
> $this->set_measurement_types();
>
> if (!empty($this->data))
> {
> if ($this->Recipe->saveAll($this->data))
> {
> $this->flash('Your recipe has been
> saved.', '/recipes');
> }
> }
> }
>
> function edit($id = null)
> {
> $this->Recipe->id = $id;
> $this->set_recipe_types();
> $this->set_ingredients();
> $this->set_measurement_types();
>
> $list = $this->IngredientList->find('all', array
> ('recipe_id' => $id));
>
> //debug($list, true);
>
> foreach($list as $item)
> {
> //debug($item['IngredientList']['recipe_id'],
> true);
> if($item['IngredientList']['recipe_id'] ==
> $id)
> {
> $ing_list[] = $item;
> }
> }
>
> $this->set('ingredient_list', $ing_list);
>
> if (empty($this->data))
> {
> $this->data = $this->Recipe->read();
> }
> else
> {
> if ($this->Recipe->saveAll($this->data))
> {
> $this->flash('Your recipe has been
> updated.','/recipes');
> }
> }
> }
>
> function delete($id)
> {
> $this->Recipe->del($id);
> $this->flash('The recipe with id: '.$id.' has been
> deleted.', '/ recipes');
> }
>
> private function set_recipe_types()
> {
> $this->set('recipe_types',
> $this->RecipeType->find('list', array
> ('fields'=>'RecipeType.recipe_type',
> 'order'=>'RecipeType.recipe_type')));
> }
>
> private function set_ingredients()
> {
> $this->set('ingredients',
> $this->Ingredient->find('list', array ('fields'=>'ingredient',
> 'order'=>'ingredient')));
> }
>
> private function set_measurement_types()
> {
> $this->set('measurement_types',
> $this->MeasurementType->find('list',
> array('fields'=>'measurement_type', 'order'=>'measurement_type')));
> }
>
> }
>
> ?>
>
> INGREDIENT ELEMENT
>
> <tr id="ingredient_<?php echo $index; ?>">
> <td>
> <?php
> echo $form->input('IngredientList.'. $index
> .'.amount');
> echo
> $form->input('IngredientList.'.$index.'.id', array
> ('type'=>'hidden'));
> ?>
> </td>
> <td>
> <?php
> echo $form->label('IngredientList.'.
> $index .'.measurement_type_id', 'Measurement Type');
> echo $form->select('IngredientList.'.
> $index .'.measurement_type_id', $measurement_types);
> ?>
> </td>
> <td>
> <?php echo $form->input('IngredientList.'.
> $index .'.description'); ?>
> </td>
> <td>
> <?php
> echo $form->label('IngredientList.'. $index
> .'.ingredient_id', 'Ingredient');
> echo $form->select('IngredientList.'. $index
> .'.ingredient_id', $ingredients);
> ?>
> </td>
> <td>
> <?php echo $html->link('delete',
> 'ingredient_list/delete'); ?>
> </td>
>
> </tr>
>
> EDIT RECIPE VIEW
>
> <h1>Edit Recipe</h1>
> <?php
> echo $form->create('Recipe', array('action' => 'edit')); echo
> $form->input('Recipe.id', array('type'=>'hidden')); echo
> $form->input('Recipe.recipe'); echo $form->input('Recipe.servings',
> array('maxlength' => 5, 'size' => 5)); echo
> $form->label('Recipe.servings', 'Recipe Type'); echo
> $form->select('Recipe.recipe_type_id', $recipe_types); ?> <div>
> <h2>Ingredient List</h2> <table id="ingredient_list"> <?php $x = 0;
> foreach($ingredient_list as $ingredient) {
> echo $this->element('add_ingredient', array('index' => $x));
> $x++;}
>
> ?>
> </table>
> <h2>Instructions and Description</h2>
> <?php
> echo $form->input('Recipe.description', array('rows' => '3')); echo
> $form->input('Recipe.instructions', array('rows' => '3')); echo
> $form->end('Save Recipe'); ?>
>
> ADD RECIPE VIEW
>
> <h1>Add Recipe</h1>
> <?php
> echo $form->create('Recipe');
> echo $form->input('Recipe.recipe');
> echo $form->input('Recipe.servings', array('maxlength' => 5, 'size' =>
> 5)); echo $form->label('Recipe.servings', 'Recipe Type'); echo
> $form->select('Recipe.recipe_type_id', $recipe_types); ?> <div>
> <h2>Ingredient List</h2> <table id="ingredient_list"> <?php for($index
> = 0; $index < 10; $index ++) {
> echo $this->element('add_ingredient', array('index' => $x));}
>
> ?>
> </table>
> <h2>Instructions and Description</h2>
> <?php
> echo $form->input('Recipe.description', array('rows' => '3')); echo
> $form->input('Recipe.instructions', array('rows' => '3')); echo
> $form->end('Save Recipe'); ?>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to cake-php+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---
No comments:
Post a Comment