Silverstripe ImageField не найден

Я пытаюсь расширить класс Member и добавить к нему несколько полей. В то же время я заставляю этот DataObject вести себя как страницу, чтобы я мог перейти на www.mysite.com/member/show/1 и увидеть профиль этого пользователя. Я еще не дошел до создания страницы участника. Прямо сейчас у меня работают все поля, за исключением ImageField. Я получаю следующую ошибку:

PHP Fatal error:  Class 'ImageField' not found in ../mysite/code/Secure/Objects/MemberDecorator.php on line 66

Код такой:

<?php
class MemberDecorator extends DataExtension {
    private static $db = array(
        "Alias" => 'Varchar',
        "About" => 'Text',
        "Birthday" => 'Date',
        "FavoriteGames" => 'Varchar',
        "Facebook" => 'Varchar',
        "Twitter" => 'Varchar',
        "Instagram" => 'Varchar',
        "Twitch" => 'Varchar',
        "Youtube" => 'Varchar',
        "SecretQuestionOne" => "Varchar",
        "SecretAnswerOne" => "Varchar",
        "SecretQuestionTwo" => "Varchar",
        "SecretAnswerTwo" => "Varchar",
        "SecretQuestionThree" => "Varchar",
        "SecretAnswerThree" => "Varchar"
    );
    private static $has_one = array(
        'Photo' => 'Image'
    );

    //Fields to show in the DOM table
    static $summary_fields = array(
        'Thumb' => 'Photo',
        "Alias" => 'Alias',
        "About" => 'About',
        "Birthday" => 'Birthday',
        "FavoriteGames" => 'FavoriteGames',
        "Facebook" => 'Facebook',
        "Twitter" => 'Twitter',
        "Instagram" => 'Instagram',
        "Twitch" => 'Twitch',
        "Youtube" => 'Youtube',
        "SecretQuestionOne" => "SecretQuestionOne",
        "SecretAnswerOne" => "SecretAnswerOne",
        "SecretQuestionTwo" => "SecretQuestionTwo",
        "SecretAnswerTwo" => "SecretAnswerTwo",
        "SecretQuestionThree" => "SecretQuestionThree",
        "SecretAnswerThree" => "SecretAnswerThree"
    );

    function getCMSFields() {
        $fields = parent::getCMSFields();
        $this->extend('updateCMSFields', $fields);
        return $fields;
    } 

    function updateCMSFields(FieldList $fields) { 
        $fields->push(new TextField("Alias", "Alias"), 'Members');
        $fields->push(new TextAreaField("About", "About"), 'Members');
        $fields->push(new DateField("Birthday", "Birthday"), 'Members');
        $fields->push(new TextField("FavoriteGames", "Favorite Games"), 'Members');
        $fields->push(new TextField("Facebook", "Facebook"), 'Members');
        $fields->push(new TextField("Twitter", "Twitter"), 'Members');
        $fields->push(new TextField("Instagram", "Instagram"), 'Members');
        $fields->push(new TextField("Twitch", "Twitch"), 'Members');
        $fields->push(new TextField("Youtube", "Youtube"), 'Members');
        $fields->push(new TextField("SecretQuestionOne", "Secret Question One"), 'Members');
        $fields->push(new TextField("SecretAnswerOne", "Secret Answer One"), 'Members');
        $fields->push(new TextField("SecretQuestionTwo", "Secret Question Two"), 'Members');
        $fields->push(new TextField("SecretAnswerTwo", "Secret Answer Two"), 'Members');
        $fields->push(new TextField("SecretQuestionThree", "Secret Question Three"), 'Members');
        $fields->push(new TextField("SecretAnswerThree", "Secret Answer Three"), 'Members');
        $fields->push(new ImageField('Photo', 'Photo', Null, Null, Null, 'Uploads/member-photos/'), 'Members');
    }

    function Link() { 
        return Director::absoluteBaseURL() . SSViewer::topLevel()->URLSegment . "/member/" . $this->ID; 
    }

    //Generate our thumbnail for the DOM
    public function getThumb()
    {
        if($this->PhotoID)
            return $this->Photo()->CMSThumbnail();
        else   
            return '(No Image)';
    }
}

Согласно каждому найденному мной примеру и документации, ImageField кажется допустимым полем. Последняя деталь: я следую этому руководству: http://www.ssbits.com/tutorials/2010/dataobjects-as-pages-part-1-keeping-it-simple/


person Bagzli    schedule 20.09.2015    source источник
comment
также в getThumb () вам нужно использовать $ this- ›owner-› PhotoID, потому что вы находитесь внутри DataExtension, украшающего свой DataObject, а не непосредственно в классе DataObject!   -  person wmk    schedule 21.09.2015


Ответы (1)


SilverStripe 3 использует UploadField.

http://api.silverstripe.org/3.1/class-UploadField.html

person Gavin Bruce    schedule 20.09.2015