Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SilverStripe可以在扩展上创建_Php_Silverstripe - Fatal编程技术网

Php SilverStripe可以在扩展上创建

Php SilverStripe可以在扩展上创建,php,silverstripe,Php,Silverstripe,对于必须始终在网站上的页面(只有1个,而不是更多,像主页),我想做一个扩展。该页面应该在我运行dev/build时创建,不能在CMS中创建、删除、取消发布或存档。但是,可以对其进行编辑 除了canCreate函数外,其他一切似乎都正常工作。当CMS在(n)(数据)扩展上时,这个函数似乎对CMS没有多大作用。当我在…/admin/pages/add上时,我仍然可以创建任意次数的页面 如果我将canCreate移动到HomePage类,它确实可以工作。但我想把它放在分机里:-) class Hom

对于必须始终在网站上的页面(只有1个,而不是更多,像主页),我想做一个扩展。该页面应该在我运行dev/build时创建,不能在CMS中创建、删除、取消发布或存档。但是,可以对其进行编辑

除了
canCreate
函数外,其他一切似乎都正常工作。当CMS在(n)(数据)扩展上时,这个函数似乎对CMS没有多大作用。当我在…/admin/pages/add上时,我仍然可以创建任意次数的页面

如果我将
canCreate
移动到HomePage类,它确实可以工作。但我想把它放在分机里:-)


class HomePage extends Page
{
    private static $extensions = [
        'OnePage'
    ];
}
我这样做是对的还是我遗漏了什么

编辑

canCreate
方法工作得很好,所以我可以这样解决它

class HomePage extends Page
{
    public function canCreate($member = null)
    {
        return $this->get()->count() == 0;
    }
}

这是一个理想的效果,就像一个魅力。但是,问题是如何将
canCreate
方法放入扩展中。这应该也行,对吧?

好吧,
$this->owner->get()
行不通
$this->owner
始终返回实际对象,而不是数据列表。它的工作原理应该是:

public function canCreate() {

    $className = $this->owner->ClassName;

    return $className::get()->count() == 0;
}

制作简单的网站,谢谢你的响应,但是<代码>获取< /代码>函数起作用了。它是一个位于
数据对象上的。它返回一个数据列表,所以你能在回答中更改它吗?除此之外,我不打算发布它,只是用它为我自己。这个答案并没有真正回答我的问题,因为我说过canCreate函数确实有效,如果你把它移动到实际的主页类
get
是一个静态方法,我怀疑你能直接从扩展名调用它。把静态方法称为非静态方法试试看。
public function canCreate() {

    $className = $this->owner->ClassName;

    return $className::get()->count() == 0;
}