Silverstripe 元素模块在元素保存时重定向到前端 404 页面
Silverstripe Elemental Module redirects to frontend 404 page on element save
我使用 dnadesign/silverstripe-elemental 2.x-dev 和 Silverstripe 4.0.1。
我为页面创建了一个模块来保存所有页面。这就是我将扩展程序添加到主页的方式。
XYPage\Model\HomePage:
extensions:
- DNADesign\Elemental\Extensions\ElementalPageExtension
这是我的主页控制器:
namespace XYpage\Controller;
use PageController;
class HomePageController extends PageController
{
}
这是我的主页模型:
namespace XYpage\Model;
use Page;
use XYpage\Controller\HomePageController;
class HomePage extends Page
{
private static $table_name = 'HomePage';
/**
* As our controller resides in a different namespace we have to
overwrite this method
*
* @return string
*/
public function getControllerName()
{
return HomePageController::class;
}
}
我将模板变量更改为 $ElementalArea。我在后端看到预期的 UI。
现在,如果我在后端保存单个元素,我总是会被重定向到前端的 404 页面。
当我切换回后端时,元素链接到页面。
如果我在内容元素上的所见即所得编辑器中填写内容并保存,内容将显示在前端的页面上。
如果我尝试编辑该元素,则会错过内容的所见即所得编辑器。
我努力解决这个问题,修改了文档,但我看不出我做错了什么。
你有两个问题,我可以立即看到:
1:您的 YAML 配置引用 XYPage\HomePage
,其中 class 的命名空间实际上是 XYPage\Model\HomePage
。我怀疑这实际上是您示例中的一个错误,而不是您的实际项目,因为您说元素编辑器正在 CMS 中工作。
2:您的 getControllerName()
方法返回的 HomePageController::class
未在 class 中导入,因此它将解析为与模型相同的命名空间(XYPage\Model\HomePageController
).虽然 this is the default/expected location 对于 SiteTree 控制器,重载此代码意味着一切都在您身上!将 use XYPage\Controller\HomePageController;
添加到您的 class 定义中。
经过大量调试后,我发现是什么导致了这些行为。就我而言,一个问题是我将 unclecheese/silverstripe-gridfield-betterbuttons 与元素一起使用。
下一个问题是反应错误:
BetterButtons 和 DNADesign Elemental 存在问题。
只需添加此项即可同时禁用 ElementContent 的 BetterButtons。
DNADesign\Elemental\Models\ElementContent:
better_buttons_enabled: false
我使用 dnadesign/silverstripe-elemental 2.x-dev 和 Silverstripe 4.0.1。
我为页面创建了一个模块来保存所有页面。这就是我将扩展程序添加到主页的方式。
XYPage\Model\HomePage:
extensions:
- DNADesign\Elemental\Extensions\ElementalPageExtension
这是我的主页控制器:
namespace XYpage\Controller;
use PageController;
class HomePageController extends PageController
{
}
这是我的主页模型:
namespace XYpage\Model;
use Page;
use XYpage\Controller\HomePageController;
class HomePage extends Page
{
private static $table_name = 'HomePage';
/**
* As our controller resides in a different namespace we have to
overwrite this method
*
* @return string
*/
public function getControllerName()
{
return HomePageController::class;
}
}
我将模板变量更改为 $ElementalArea。我在后端看到预期的 UI。
现在,如果我在后端保存单个元素,我总是会被重定向到前端的 404 页面。
当我切换回后端时,元素链接到页面。
如果我在内容元素上的所见即所得编辑器中填写内容并保存,内容将显示在前端的页面上。
如果我尝试编辑该元素,则会错过内容的所见即所得编辑器。
我努力解决这个问题,修改了文档,但我看不出我做错了什么。
你有两个问题,我可以立即看到:
1:您的 YAML 配置引用 XYPage\HomePage
,其中 class 的命名空间实际上是 XYPage\Model\HomePage
。我怀疑这实际上是您示例中的一个错误,而不是您的实际项目,因为您说元素编辑器正在 CMS 中工作。
2:您的 getControllerName()
方法返回的 HomePageController::class
未在 class 中导入,因此它将解析为与模型相同的命名空间(XYPage\Model\HomePageController
).虽然 this is the default/expected location 对于 SiteTree 控制器,重载此代码意味着一切都在您身上!将 use XYPage\Controller\HomePageController;
添加到您的 class 定义中。
经过大量调试后,我发现是什么导致了这些行为。就我而言,一个问题是我将 unclecheese/silverstripe-gridfield-betterbuttons 与元素一起使用。
下一个问题是反应错误:
BetterButtons 和 DNADesign Elemental 存在问题。
只需添加此项即可同时禁用 ElementContent 的 BetterButtons。
DNADesign\Elemental\Models\ElementContent:
better_buttons_enabled: false