Jump to:

22976 Posts in 11493 Topics by 2824 members

General Questions

SilverStripe Forums » General Questions » GenericViews CRUD

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

Page: 1
Go to End
Author Topic: 722 Views
  • nicanor
    Avatar
    Community Member
    15 Posts

    GenericViews CRUD Link to this post

    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();
    }
    }

  • nicanor
    Avatar
    Community Member
    15 Posts

    Re: GenericViews CRUD Link to this post

    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();
    }

  • zenmonkey
    Avatar
    Community Member
    524 Posts

    Re: GenericViews CRUD Link to this post

    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

    722 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.