如何在Yii2中将拆分后的控制器逻辑整合到planning目录下?
Yii2 拆分控制器并实现自定义路由方案
1. 创建拆分后的控制器
在dashboard模块的controllers目录下,分别新建PurchaseController.php和SupplierController.php,将原PlanningController中对应业务的动作迁移过来:
PurchaseController.php
namespace app\modules\dashboard\controllers; use yii\web\Controller; class PurchaseController extends Controller { // 对应原路由 /dashboard/planning/purchase public function actionIndex() { // 原PlanningController::actionPurchase()的业务逻辑 } // 对应目标路由 /dashboard/planning/purchase/create public function actionCreate() { // 原PlanningController::actionPurchaseCreate()的业务逻辑 } // 对应目标路由 /dashboard/planning/purchase/update public function actionUpdate($id) { // 原PlanningController::actionPurchaseUpdate()的业务逻辑 } }
SupplierController.php
namespace app\modules\dashboard\controllers; use yii\web\Controller; class SupplierController extends Controller { // 对应原路由 /dashboard/planning/supplier public function actionIndex() { // 原PlanningController::actionSupplier()的业务逻辑 } // 对应目标路由 /dashboard/planning/supplier/create public function actionCreate() { // 原PlanningController::actionSupplierCreate()的业务逻辑 } // 对应目标路由 /dashboard/planning/supplier/update public function actionUpdate($id) { // 原PlanningController::actionSupplierUpdate()的业务逻辑 } }
2. 配置路由映射规则
在dashboard模块的Module.php中,重写init()方法,添加自定义URL规则,将目标路由映射到新控制器的动作:
namespace app\modules\dashboard; use yii\base\Module; class Module extends Module { public $controllerNamespace = 'app\modules\dashboard\controllers'; public function init() { parent::init(); // 追加路由规则,避免覆盖全局规则 \Yii::$app->urlManager->addRules([ // 采购业务路由映射 'dashboard/planning/purchase' => 'dashboard/purchase/index', 'dashboard/planning/purchase/create' => 'dashboard/purchase/create', 'dashboard/planning/purchase/update/<id:\d+>' => 'dashboard/purchase/update', // 供应商业务路由映射 'dashboard/planning/supplier' => 'dashboard/supplier/index', 'dashboard/planning/supplier/create' => 'dashboard/supplier/create', 'dashboard/planning/supplier/update/<id:\d+>' => 'dashboard/supplier/update', ], false); } }
3. 清理原控制器(可选)
如果原PlanningController不再使用,可以直接删除或重命名,避免路由冲突。
内容的提问来源于stack exchange,提问作者daniil sidorov
相关产品推荐
相关产品推荐

