0

0

Yii 2 CRUD 访问 Product 控制器出现 404 错误解决方案

花韻仙語

花韻仙語

发布时间:2025-08-01 17:24:26

|

726人浏览过

|

来源于php中文网

原创

yii 2 crud 访问 product 控制器出现 404 错误解决方案

本文旨在解决Yii 2框架中使用Gii生成的CRUD模块,在配置了URL美化后,访问Product控制器时出现404错误的问题。通过分析目录结构和视图文件存放位置,提供详细的解决方案,帮助开发者正确配置和访问CRUD模块,避免常见的URL路由问题。

问题分析

在使用Yii 2的Gii工具生成CRUD(Create, Read, Update, Delete)模块后,如果启用了URL美化,可能会遇到访问控制器时出现404错误。这通常是由于视图文件存放位置不正确导致的。Yii 2框架对视图文件的存放位置有严格的要求,如果视图文件存放位置不符合规范,会导致框架无法正确找到对应的视图文件,从而抛出404错误。

解决方案

正确的视图文件存放位置应该在views目录下,并以控制器名称命名子目录。例如,对于ProductController,其对应的视图文件应该存放在views/product目录下。

步骤如下:

  1. 检查视图文件目录结构: 确保你的视图文件目录结构如下所示:

    views/
        product/
            _form.php
            _search.php
            create.php
            index.php
            update.php
            view.php

    如果你的视图文件存放在views/layouts/product目录下,你需要将其移动到views/product目录下。

  2. 确认 URL 管理器配置: 检查你的config/web.php(或config/main.php)文件中的URL管理器配置,确保启用了URL美化,并设置了正确的规则。

    星火作家大神
    星火作家大神

    星火作家大神是一款面向作家的AI写作工具

    下载
    'components' => [
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                // 可以在这里添加自定义规则,但通常情况下,默认规则已经足够
            ],
        ],
    ],

    enablePrettyUrl设置为true表示启用URL美化,showScriptName设置为false表示隐藏index.php入口文件。

  3. 检查控制器名称: 确认你的控制器名称是否正确。例如,ProductController应该对应于product路由。

  4. 清除缓存: 在修改了配置文件或视图文件后,建议清除Yii 2的缓存。可以使用以下命令:

    php yii cache/flush-all

示例代码

假设你的ProductController的代码如下:

 [
                'class' => VerbFilter::class,
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
        ];
    }

    /**
     * Lists all Product models.
     * @return string
     */
    public function actionIndex()
    {
        $searchModel = new ProductSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

    /**
     * Displays a single Product model.
     * @param int $id ID
     * @return string
     * @throws NotFoundHttpException if the model cannot be found
     */
    public function actionView($id)
    {
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

    /**
     * Creates a new Product model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     * @return string|\yii\web\Response
     */
    public function actionCreate()
    {
        $model = new Product();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('create', [
            'model' => $model,
        ]);
    }

    /**
     * Updates an existing Product model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param int $id ID
     * @return string|\yii\web\Response
     * @throws NotFoundHttpException if the model cannot be found
     */
    public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        }

        return $this->render('update', [
            'model' => $model,
        ]);
    }

    /**
     * Deletes an existing Product model.
     * If deletion is successful, the browser will be redirected to the 'index' page.
     * @param int $id ID
     * @return \yii\web\Response
     * @throws NotFoundHttpException if the model cannot be found
     */
    public function actionDelete($id)
    {
        $this->findModel($id)->delete();

        return $this->redirect(['index']);
    }

    /**
     * Finds the Product model based on its primary key value.
     * If the model is not found, a 404 HTTP exception will be thrown.
     * @param int $id ID
     * @return Product the loaded model
     * @throws NotFoundHttpException if the model cannot be found
     */
    protected function findModel($id)
    {
        if (($model = Product::findOne($id)) !== null) {
            return $model;
        }

        throw new NotFoundHttpException('The requested page does not exist.');
    }
}

确保actionIndex()方法渲染的视图文件是views/product/index.php,actionView()方法渲染的视图文件是views/product/view.php,以此类推。

注意事项

  • 视图文件命名: 视图文件的命名应该与控制器中的 action 方法相对应。例如,actionIndex 对应 index.php,actionCreate 对应 create.php。
  • 布局文件: views/layouts 目录用于存放布局文件,而不是 CRUD 模块的视图文件。
  • URL 规则: 如果需要自定义 URL 规则,可以在 URL 管理器的 rules 数组中添加。

总结

解决Yii 2 CRUD模块访问出现404错误的关键在于确保视图文件存放位置正确。遵循Yii 2的目录结构规范,将视图文件存放在以控制器名称命名的子目录下,可以避免此类问题。同时,正确配置URL管理器,并清除缓存,可以确保URL路由正常工作。通过以上步骤,可以成功访问Gii生成的CRUD模块,并进行后续的开发工作。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2744

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1675

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1533

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

995

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1464

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1235

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1549

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1307

2023.11.13

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

1

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.9万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号