表单为HMVC小部件


Form as HMVC widget

这是在FuelPHP中创建表单小部件的正确方法吗?

class Controller_Widget extends Controller
{
    public function action_show()
    {
        if (Request::is_hmvc())
        {
            // show form widget
        }
        else
        {
            // process form
        }
    }
}

表单操作调用相同的函数进行处理,但之后它将重定向到哪里?它将如何显示验证错误?

注意:小部件不应通过URL访问;如果直接通过URL访问,则表单不应显示其自身。

编辑:在CodeIgniter HMVC和动态小部件中发现了类似的问题,但这是3年前的问题。也许FuelPHP的人已经找到了更好的方法来做到这一点。

这似乎是一个奇怪的方法,一个名为show但同时处理显示和操作数据的方法?一个名为"show"(或get、fetch、read等)的方法不应该进行任何编辑,它的名称似乎明确暗示它是一个只读操作。

但它的处理方式似乎也不一样。它的读取操作仅是HMVC,而它的操作仅是非HMVC?这真的是一种错误的方法来确定该方法应该做什么,无论它是否是HMVC都不应该暴露它的作用。

在您的情况下,我将其分为两种方法:一种用于检索(show()),另一种用于操作(例如edit())。你是否只想制作这些HMVC取决于你自己。解决这个问题的方法不止一种,我会选择:

if ( ! Request::is_hmvc()) { throw new Exception('Only HMVC access allowed.'); }

或者,通过在routes.php配置文件中重新路由该方法,然后使用此处讨论的HMVC路由覆盖,使其无法路由到该方法:https://stackoverflow.com/a/9957367/727225