Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

GenericViews CRUD


Reply


3 Posts   850 Views

Avatar
nicanor

Community Member, 15 Posts

29 July 2011 at 2:02am

Edited: 29/07/2011 2:03am

I need froms which supplies CRUD in fronend. No problem to get it working in the backend. I just testetd GenericViews, but it just works for the action view. When i try to customize the url like this

form/8/view to

form/8/edit

i got an empty page. Silverstripe Version is 2.4.5

So i tried out how to make it by my own,
the form Page looks liek this. I tried to get the data after creation back into the form fields.

i save the ID in "createPerson" with Session::set('ID',$submission->ID);

and get it back in myForm with DataObject::get_by_id('HorseSubmission',$id);

is it the right way? How to updated data for an special ID?

class FormPage extends Page {
static $db = array(
);

      static $has_one = array(
);

}

class FormPage_Controller extends Page_Controller {
function myForm() {    
         if(Session::get("ID"))
   {
      $id = Session::get("ID");
      $record = DataObject::get_by_id('HorseSubmission',$id);

       $fields = new FieldSet(
                  new TextField('Person','Person',$record->Person),
                  new ImageField('Image1','Bild',$record->Image1),
                  new ImageField('Image2','Bild',$record->Image2),
   );

   // Create actions
   $actions = new FieldSet(
new FormAction('createHorse', 'Submit')
   );

   return new Form($this, 'myForm', $fields, $actions);
   }   //end if
   else
   {
   $fields = new FieldSet(
                  new TextField('Name'),
                  new ImageField('Image1'),
                  new ImageField('Image2')
   );

$actions = new FieldSet(
new FormAction('createPerson', 'Submit')
);

return new Form($this, 'myForm', $fields, $actions);
} // end else
}

function createPerson($data, $form) {
$submission = new PersonSubmission();
$form->saveInto($submission);
$submission->write();
Session::set('ID',$submission->ID);
    Director::redirectBack();
}
}

Avatar
nicanor

Community Member, 15 Posts

29 July 2011 at 3:13am

To update a Person i added a method "updatePerson". It's the same like "createPerson" above. I've just added the line $submission->ID = Session::get("ID");
So it's possible to specify the ID before ->write()

Is this really the way you should solve a CRUD funcionality in SilverStripe?
For me it seems not bad, but really different from other Solutions.
The ID's are stored in OS temp dir, in Silverstripe cache -> Session
Nothing, no Id, no data is visible for the user - correct me i am wrong.

function updatePerson($data, $form) {
$submission = new PersonSubmission();
$form->saveInto($submission);
$submission->ID = Session::get("ID");
$submission->write();
Session::set('ID',$submission->ID);
   Director::redirectBack();
}

Avatar
zenmonkey

Community Member, 528 Posts

29 July 2011 at 7:30am

Not totally sure I get what you're trying to do, as we'd need to see your actual data object and not just the form. But the easiest way to pass the an ID from a Form to an action is to place it a hidden field. If you're editing an existing submission you can use (using you current method of storing the ID):

$id = Session::get("ID");
$submission = DataObject::get_by_id("PersonSubmission", $id);
$form->saveInto($submission);
$submission->write();

Since the object record already exists you just need to pull it from the DB before saving into. Take a look at this page http://doc.silverstripe.org/sapphire/en/topics/datamodel#update I left out the if statement so you may want to add it back in