You are correct the code is not exactly correct. However the passing of the 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-...@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+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---