Jump to:

3460 Posts in 1064 Topics by 739 members

Data Model Questions

SilverStripe Forums » Data Model Questions » [SOLVED] 500 Error: "Uncaught Exception: Object->__call(): the method 'parent' does not exist on...

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

Page: 1
Go to End
Author Topic: 939 Views
  • _Vince
    Avatar
    Community Member
    161 Posts

    [SOLVED] 500 Error: "Uncaught Exception: Object->__call(): the method 'parent' does not exist on... Link to this post

    I'm having a bit of a problem with this.

    Basically, I want to have a dataobject, "Trainer". Each trainer has their own page on the site. The trainers must be able to log in, so I thought to extend the Member class.

    When the Trainer record is created, a Page would be created for the trainer as well. And yet, I can't get it to work. I always get

    ERROR [User Error]: Uncaught Exception: Object->__call(): the method 'parent' does not exist on 'TrainerPage'
    IN POST /allactive/admin/Data/Trainer/16/EditForm?action_doSave=Save
    Line 724 in /var/www/allactive/sapphire/core/Object.php

    Can anybody tell me what I've done wrong?

    Here's the code for TrainerPage.

    <?php
    class TrainerPage extends SiteTree{
       static $has_one = array(
          "Trainer" => "Trainer"
       );
    }

    class TrainerPage_Controller extends Page_Controller{

    }

    and Trainer:

    <?php
    class Trainer extends Member{

       static $db = array(
          "TR_LandlineNumber" => "Varchar(20)",
          "TR_MobileNumber" => "Varchar(20)",
          "TR_Notes" => "Text"
       );
       
       static $has_one = array(
          "TR_Area" => "Area",
          "TR_Region" => "Region"
       );
       
       static $has_many = array(
          "Client" => "Client"
       );
       
    function getCMSFields() {

    $sqlQuery = new SQLQuery(array("ID", "AreaDescription"), "Area");
    $AreaMap = $sqlQuery->execute()->map();

    $sqlQuery = new SQLQuery(array("ID", "RegionDescription"), "Region");
    $RegionMap = $sqlQuery->execute()->map();

    $fields = parent::getCMSFields();
    $fields->RemoveFieldFromTab( 'Root.Main', "DateFormat");
    $fields->RemoveFieldFromTab( 'Root.Main', "TimeFormat");
    $fields->RemoveFieldFromTab( 'Root.Main', "TR_AreaID");
    $fields->RemoveFieldFromTab( 'Root.Main', "TR_RegionID");
    $fields->RemoveFieldFromTab( 'Root.Main', "TR_Notes");
    $fields->RemoveFieldFromTab( 'Root.Main', "TR_LandlineNumber");
    $fields->RemoveFieldFromTab( 'Root.Main', "TR_MobileNumber");

    $fields->addFieldToTab( 'Root.Main', new TextField("TR_LandlineNumber", "Landline Number"));
    $fields->addFieldToTab( 'Root.Main', new TextField("TR_MobileNumber", "Mobile Number"));
    $fields->addFieldToTab( 'Root.Main', new TextareaField("TR_Notes", "Notes"));
    $fields->addFieldToTab( 'Root.Main', new ListboxField("TR_RegionID", "Region", $RegionMap));
    $fields->addFieldToTab( 'Root.Main', new ListboxField("TR_AreaID", "Area", $AreaMap));

    return $fields;
       }
       
       function onBeforeWrite(){

          // TODO: check if the page already exists
       
          parent::onBeforeWrite();
          
          $newTrainerPage = new Page();
          $newTrainerPage->ClassName = "TrainerPage";
          $newTrainerPage->Created = time();
          $newTrainerPage->LastEdited = time();
          $newTrainerPage->Title = $this->Surname . " " . $this->FirstName;
          $newTrainerPage->URLSegment = strtolower($this->Surname . "-" . $this->FirstName);
          $newTrainerPage->ShowInMenus = 1;
          $newTrainerPage->ShowInSearch = 1;
          $newTrainerPage->CanEditType = "Inherit";
          $newTrainerPage->CanViewType = "Inherit";
          $newTrainerPage->Status = "Published";
          $ID = $newTrainerPage->write();

          $newTrainerPage->publish("Stage", "Live");

       }
    }

  • _Vince
    Avatar
    Community Member
    161 Posts

    Re: [SOLVED] 500 Error: "Uncaught Exception: Object->__call(): the method 'parent' does not exist on... Link to this post

    Sorted.

    Rather than a Page(), I should have tried to create a TrainerPage()

    939 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.