Я следовал за учебником по https://www.silverstripe.org/learn/lessons/working-with-data-relationships-has-many?ref=hub, чтобы создать несколько элементов для моей домашней страницы. Но как-то я пропустил один кусок, потому что я получаю эту ошибкуhas_many и has_one relationship SilverStripe
[Error] Uncaught Исключение: Нет has_one найти на классе «HomePageFeatured», то has_many отношение от «HomePage» до «HomePageFeatured» требует HAS_ONE на «HomePageFeatured»
HomePage.php
<?php
/**
* Defines the HomePage page type
*/
class HomePage extends Page {
// private static $db = array(
//);
// private static $has_one = array(
//);
private static $has_many = array (
'Featured' => 'HomePageFeatured'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldToTab('Root.Featured', GridField::create(
'Featured',
'Hervorgehobene Produkte',
$this->Featured(),
GridFieldConfig_RecordEditor::create()
));
return $fields;
}
private static $icon = "themes/hstheme/images/treeicons/home";
}
class HomePage_Controller extends Page_Controller {
}
HomePageFeatured.php
<?php
/**
* Holds the featured items from the Homepage
*/
class HomePageFeatured extends DataObject {
private static $db = array(
'Title' => 'Varchar',
'Description' => 'Text'
);
private static $has_one = array(
'Photo' => 'Image',
'HomePageFeatured' => 'HomePageFeatured'
);
public function getCMSFields() {
$fields = FieldList::create(
TextField::create('Title'),
TextareaField::create('Description'),
$uploader = UploadField::create('Photo')
);
$uploader->setFolderName('featured-photos');
$uploader->getValidator()->setAllowedExtensions(array('png','gif','jpeg','jpg'));
return $fields;
}
}
Как я понимаю, проблема заключается в $ has_one от HomePag eFeatured.php. Но у него есть ссылка от HomePageFeatured.
Большое спасибо! В учебнике был «намек»: «Как правило, ответный has_one, как это, можно просто назвать после родительского класса». Не знал, что для него есть ключевое слово Parent. – suntrop
@suntrop ''Parent'' в этом контексте - это просто имя отношения между вашим« HomePageFeatured »и« HomePage ». Это имя отношения может быть любым. Я советую вам быть осторожным при использовании ''Parent'' в качестве имени отношения, потому что это уже отношение на всех' '' '' ', ссылаясь на родителя в иерархии дерева сайтов. Поэтому, если ваш 'HomePageFeatured' расширил' Page' вместо 'DataObject', вы можете получить неожиданные последствия с' 'Parent'' в качестве имени отношения. Что предлагает учебник, так это то, что вы делаете это: 'private static $ has_one = ['HomePage' => 'HomePage']'. –