2

アプリケーション内にコントローラーがほとんどなく、コントローラーでビジネス ロジックを使いすぎています。たとえば、このアクションメソッドを見てください

public function publishedAction()
{
    if ($this->getRequest()->isXmlHttpRequest()) {
        $dataTable = new Model_DataTables('item i', array('i.id', 'i.title', 'i.from_age', 'i.to_age', 'i.gender', 'i.created_at', 'i.ispublished'));
        $item = new Model_Item();
        $output = $dataTable->aaData();
        $iResult = $dataTable->iResult();
        foreach($iResult as $k => $v) {
            $id = $iResult[$k][0];
            $iResult[$k][0] = date('d-m-Y', strtotime($iResult[$k][5]));
            $iResult[$k][2] = $item->formatAge($iResult[$k][2], $iResult[$k][3]);
            $iResult[$k][3] = ($iResult[$k][4] == 1) ? 'Male' : 'Female';
            $iResult[$k][4] = "<a href=/admin/item/view/".$id.">View</a>";
            $iResult[$k]['DT_RowId'] = "$id";
        }
        $output['aaData'] = $iResult;
        $this->_helper->json($output);
    }
}

上記のアクション メソッドを参照すると、データをフォーマットするためのロジックはコントローラー自体で処理されます。同じコントローラーにこのメソッドがいくつかあるため、コントローラーが太くなります。多くの経験豊富な魂は、コントローラーをできるだけ薄く保つことに同意しています. 上記のメソッドのすべてのビジネス ロジックを対応するモデルに移動する必要がありますか、それとも現在のフローで問題ありませんか?

アップデート:

上記のコードを参照して、すべてのビジネスロジックをモデルに配置しました

public function getPublishedItem()
{
    $dataTable = new Model_DataTables('item i', array('i.id', 'i.title', 'i.from_age', 'i.to_age', 'i.gender', 'i.created_at', 'i.ispublished'));
    $output = $dataTable->aaData();
    $iResult = $dataTable->iResult();
    foreach($iResult as $k => $v) {
        $id = $iResult[$k][0];
        $iResult[$k][0] = date('d-m-Y', strtotime($iResult[$k][5]));
        $iResult[$k][2] = $this->formatAge($iResult[$k][2], $iResult[$k][3]);
        $iResult[$k][3] = ($iResult[$k][4] == 1) ? 'Male' : 'Female';
        $iResult[$k][4] = "<a href=/admin/item/view/".$id.">View</a>";
        $iResult[$k]['DT_RowId'] = $id;
    }
    $output['aaData'] = $iResult;
    return $output;
}

そしてコントローラーで

public function publishedAction()
{
    if ($this->getRequest()->isXmlHttpRequest()) {
        $item = new Model_Item();
        $this->_helper->json($item->getPublishedItem());
    }
}

それは正しいアプローチですか?または私は間違った方法をやっていますか?

4

1 に答える 1

2

$iResultモデル (Model_DataTables) から取得したので、単純に次のようにしたほうがよいのではないでしょうか。

public function publishedAction()
{
    if ($this->getRequest()->isXmlHttpRequest()) {
        $dataTable = new Model_DataTables('item i', array('i.id', 'i.title', 'i.from_age', 'i.to_age', 'i.gender', 'i.created_at', 'i.ispublished'));
        $output['aaData'] = $dataTable->getIResult();
        $this->_helper->json($output);
    }
}

getIResult()foreachが含まれている場所。

別の解決策は、html コンテンツをフォーマットしているように見えるため、ビュー ヘルパーを使用することです。あなたの行動は次のようになります:

public function publishedAction()
{
    if ($this->getRequest()->isXmlHttpRequest()) {
        $dataTable = new Model_DataTables('item i', array('i.id', 'i.title', 'i.from_age', 'i.to_age', 'i.gender', 'i.created_at', 'i.ispublished'));
        $output['aaData'] = $this->view->formatIResult($dataTable->getIResult());
        $this->_helper->json($output);
    }
}

formatIResult()、ビュー ヘルパーの名前です。

于 2012-04-19T15:29:38.130 に答える