Silverstripe能够让用户在/ admin / pages / publishall上的网站上发布所有页面,并且发布所有代码都在/cms/code/controllers/CMSMain.php
我们遇到了一些问题,如果用户只是在其他环境中运行时,会意外地在生产中运行发布 - 如何禁用发布功能?
答案 0 :(得分:1)
我解决此问题的第一种方法是创建一个自定义CMSPageController.php,我将在其中覆盖publishall,并在if块中调用parent :: publishall($ request)来检查我们所处的环境。这种方法的问题在于注入自定义类会产生编辑页面的问题。理想情况下,我本来可以扩展publishall,但正如上面提到的Nunser,Silverstripe(令人沮丧地)没有在该方法中包含扩展钩子。
我最终创建了一个自定义路由来覆盖admin / pages / publishall
所以在mysite / _config / routes.yml
里面'admin/pages/publishall': CustomPublishallController
和mysite / code / controllers / CustomPublishallController.php
<?php
/**
* Controller for providing silverstripes inbuilt publishall functionality with the ability to
* run in production removed.
*
* @package sitename
* @subpackage mysite
*/
class CustomPublishallController extends Controller {
public function index($request){
$cmsMain = new CMSMain();
if(ENVIRONMENT_CONSTANT != 'prod'){
return $cmsMain->publishall($request);
}
return Security::permissionFailure($this);
}
}