【问题标题】:Yii: Unable to load the url page " Error 404 Unable to resolve the request "user/userpage"."Yii:无法加载 url 页面“错误 404 无法解析请求“用户/用户页面”。”
【发布时间】:2015-12-05 08:59:49
【问题描述】:

我是一个 yiibie,我正在尝试从用户表中获取用户数据与那里的 id。为此,我在视图中创建了一个userpage.php 文件,并在user controller 中编写了一个名为Userpage 的函数来从表中获取用户数据。在我写了 url "localhost/projectname/user/userpage?id="anyid" 完成所有这些操作后,它给了我一个错误

Error 404
Unable to resolve the request "user/userpage".

这是我的UserController的代码

<?php

class UserController extends RController
{
    /**
    * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
    * using two-column layout. See 'protected/views/layouts/column2.php'.
    */
    public $layout='//layouts/admin';

    /**
    * @return array action filters
    */
    public function filters()
    {
        return array(
            //          'accessControl', // perform access control for CRUD operations
            //          'postOnly + delete', // we only allow deletion via POST request
                    'rights',
        );
    }

    /**
    * Specifies the access control rules.
    * This method is used by the 'accessControl' filter.
    * @return array access control rules
    */
    public function accessRules()
    {
        return array(
            array('allow',  // allow all users to perform 'index' and 'view' actions
                'actions'=>array('index','view'),
                'users'=>array('*'),
            ),
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('create','update'),
                'users'=>array('@'),
            ),
            array('allow', // allow admin user to perform 'admin' and 'delete' actions
                'actions'=>array('admin','delete'),
                'users'=>array('admin'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }

    /**
    * Displays a particular model.
    * @param integer $id the ID of the model to be displayed
    */
    public function actionView($id)
    {
        $this->render('view',array(
            'model'=>$this->loadModel($id),
        ));
    }
        public function actionUserpage($id)
        {
            $this->layout='main';
        $this->render('userpage',array(
            'model'=>$this->loadModel($id),
        ));
        }

    /**
    * Creates a new model.
    * If creation is successful, the browser will be redirected to the 'view' page.
    */
    public function actionCreate()
    {
        $model=new User;

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['User']))
        {
                    $rnd = rand(0,9999);  // generate random number between 0-9999
            $model->attributes=$_POST['User'];
                        $uploadedFile=CUploadedFile::getInstance($model,'image');
            $fileName = "{$rnd}-{$uploadedFile}";  // random number + file name
            $model->image = $fileName;
            if($model->save())
                            {
                $uploadedFile->saveAs(Yii::app()->basePath.'/'.$fileName);  // image will uplode to rootDirectory/event/
                $this->redirect(array('admin'));
            }
                $this->redirect(array('view','id'=>$model->id));
        }

        $this->render('create',array(
        'model'=>$model,
        ));
    }

    /**
    * Updates a particular model.
    * If update is successful, the browser will be redirected to the 'view' page.
    * @param integer $id the ID of the model to be updated
    */
    public function actionUpdate($id)
    {
        $model=$this->loadModel($id);

        // Uncomment the following line if AJAX validation is needed
        // $this->performAjaxValidation($model);

        if(isset($_POST['User']))
        {
                    $_POST['User']['image'] = $model->image;
            $model->attributes=$_POST['User'];
                        $uploadedFile=CUploadedFile::getInstance($model,'image');
            if($model->save())
                             {
                if(!empty($uploadedFile))  // check if uploaded file is set or not
                {
                 $uploadedFile->saveAs(Yii::app()->basePath.'/'.$model->image);
                }
                $this->redirect(array('admin'));
            }
                $this->redirect(array('view','id'=>$model->id));
        }

        $this->render('update',array(
            'model'=>$model,
        ));
    }

    /**
    * Deletes a particular model.
    * If deletion is successful, the browser will be redirected to the 'admin' page.
    * @param integer $id the ID of the model to be deleted
    */
    public function actionDelete($id)
    {
        if(Yii::app()->request->isPostRequest)
        {
            // we only allow deletion via POST request
            $this->loadModel($id)->delete();

            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
            if(!isset($_GET['ajax']))
                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
        }
        else
            throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
    }

    /**
    * Lists all models.
    */
    public function actionIndex()
    {
        $dataProvider=new CActiveDataProvider('User');
        $this->render('index',array(
            'dataProvider'=>$dataProvider,
        ));
    }

    /**
    * Manages all models.
    */
    public function actionAdmin()
    {
        $model=new User('search');
        $model->unsetAttributes();  // clear any default values
        if(isset($_GET['User']))
            $model->attributes=$_GET['User'];

        $this->render('admin',array(
            'model'=>$model,
        ));
    }

    /**
    * Returns the data model based on the primary key given in the GET variable.
    * If the data model is not found, an HTTP exception will be raised.
    * @param integer $id the ID of the model to be loaded
    * @return User the loaded model
    * @throws CHttpException
    */
    public function loadModel($id)
    {
        $model=User::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }

    /**
    * Performs the AJAX validation.
    * @param User $model the model to be validated
    */
    protected function performAjaxValidation($model)
    {
        if(isset($_POST['ajax']) && $_POST['ajax']==='user-form')
        {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }
}

这是我的视图文件(userpage.php)的代码

 <div class="profile">
 <div class="row">
 <div class="col-md-4">
 <img src="<?php echo Yii::app()->request->baseurl;?>/img/<?php echo $model->profile->picture;?>" class="img-responsive"><br>
 </div>
 <div class="col-md-6">
 <h2 class="profile-name"><?php echo $model->username;?></h2>
 <hYii: Unable to load the url page " Error 404 Unable to resolve the request "user/userpage"."

这是 config/main.php

<?php

// uncomment the following to define a path alias
// Yii::setPathOfAlias('local','path/to/local-folder');

// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.

return array(
     'theme' => 'bootstrap',
    'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',
    'name'=>'emergency response system',

    // preloading 'log' component
    'preload'=>array('log'),
'aliases' => array(
        'bootstrap' => 'ext.bootstrap'),
    // autoloading model and component classes
    'import'=>array(
        'application.models.*',
        'application.components.*',
         'bootstrap.behaviors.*',
                'bootstrap.helpers.*',
                'bootstrap.widgets.*',
                'application.modules.user.models.*',
                'application.modules.user.components.*',
                'application.modules.rights.*',
                'application.modules.rights.components.*',
                'application.extensions.EAjaxUpload.*',//for multiuploadfiles
            'application.extensions.kml.*'
            ),

    'modules'=>array(
        // uncomment the following to enable the Gii tool

        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'ers',
                     'generatorPaths' => array(
                'bootstrap.gii', ),
            // If removed, Gii defaults to localhost only. Edit carefully to taste.
            'ipFilters'=>array('127.0.0.1','::1'),
        ),
            'user' => array(
            'tableUsers' => 'user',
            'tableProfiles' => 'profiles',
            'tableProfileFields' => 'profiles_fields',
//                # encrypting method (php hash function)
//                'hash' => 'md5',
// 
//                # send activation email
//                'sendActivationMail' => true,
// 
//                # allow access for non-activated users
//                'loginNotActiv' => false,
// 
//                # activate user on registration (only sendActivationMail = false)
//                'activeAfterRegister' => false,
// 
//                # automatically login from registration
//                'autoLogin' => true,
// 
//                # registration path
//               'registrationUrl' => array('/user/registration'),
//
//                # recovery password path
//                'recoveryUrl' => array('/user/recovery'),
// 
//                # login form path
//                'loginUrl' => array('/user/login'),
// 
//                # page after login
//                'returnUrl' => array('/user/profile'),
// 
//               # page after logout
//               'returnLogoutUrl' => array('/user/login'),


    ),
             'rights'=>array(
             'install'=>true,
//                 'superuserName'=>'Admin', // Name of the role with super user privileges. 
//               'authenticatedName'=>'Authenticated',  // Name of the authenticated user role. 
//               'userIdColumn'=>'id', // Name of the user id column in the database. 
//               'userNameColumn'=>'username',  // Name of the user name column in the database. 
//               'enableBizRule'=>true,  // Whether to enable authorization item business rules. 
//               'enableBizRuleData'=>true,   // Whether to enable data for business rules. 
//               'displayDescription'=>true,  // Whether to use item description instead of name. 
//               'flashSuccessKey'=>'RightsSuccess', // Key to use for setting success flash messages. 
//               'flashErrorKey'=>'RightsError', // Key to use for setting error flash messages. 
//               'baseUrl'=>'/rights', // Base URL for Rights. Change if module is nested. 
//               'layout'=>'rights.views.layouts.main',  // Layout to use for displaying Rights. 
//               'appLayout'=>'application.views.layouts.main', // Application layout. 
//               'cssFile'=>'rights.css', // Style sheet file to use for Rights. 
//               'install'=>false,  // Whether to enable installer. 
//               'debug'=>false, 
        ),
            ),

    // application components
    'components'=>array(

        'user'=>array(
                    'class'=>'RWebUser',
            // enable cookie-based authentication
            'allowAutoLogin'=>true,
                    'loginUrl'=>array('/user/login'),
        ),
            'authManager'=>array(
                'class'=>'RDbAuthManager',
                'connectionID'=>'db',
                'defaultRoles'=>array('Authenticated', 'Guest'),

//                'itemTable'=>'authitem',
//                'itemChildTable'=>'authitemchild',
//                'assignmentTable'=>'authassignment',
//                'rightsTable'=>'rights',
        ),


        'bootstrap' => array(
            'class' => 'bootstrap.components.BsApi',),

        // uncomment the following to enable URLs in path-format

        'urlManager'=>array(
            'urlFormat'=>'path',
                     'showScriptName'=>false,
            'rules'=>array(
        //'<controller:\w+>'=>'<controller>/list',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                '<controller:\w+>/<id:\d+>/<title>'=>'<controller>/view',
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            ),
        ),


        // database settings are configured in database.php
        //'db'=>require(dirname(__FILE__).'/database.php'),

        'db'=>array(
            'connectionString' => 'mysql:host=localhost;dbname=response_system',
            'emulatePrepare' => true,
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
        ),

        'errorHandler'=>array(
            // use 'site/error' action to display errors
            'errorAction'=>'site/error',
        ),

        'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                array(
                    'class'=>'CFileLogRoute',
                    'levels'=>'error, warning',
                ),
                // uncomment the following to show log messages on web pages

                array(
                    'class'=>'CWebLogRoute',
                ),

            ),
        ),

    ),

    // application-level parameters that can be accessed
    // using Yii::app()->params['paramName']
    'params'=>array(
        // this is used in contact page
        'adminEmail'=>'webmaster@example.com',
    ),

);

【问题讨论】:

    标签: php yii


    【解决方案1】:

    检查你有一个正确的视图命名

     userpage.php 
    

    在用户的视图目录中 (用户的相关视图目录取决于您使用的用户组件。)

    检查应用程序的命名空间或 config/main.php 以找到正确的目录。

    还要检查您是否在用户模型的 accessRules 中正确分配了用户页面。

    并且绝对确定您使用的是有效的 $id 值。因为如果在 db 中找不到 id 的值,应该会引发这种消息

    并尝试添加 prettyUrl = true 否则你不能使用你的符号

         'urlManager'=>array(
            'urlFormat'=>'path',
            'showScriptName'=>false,
            'enablePrettyUrl' => true,   // Disable r= routes
            'rules'=>array(
        //'<controller:\w+>'=>'<controller>/list',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
                '<controller:\w+>/<id:\d+>/<title>'=>'<controller>/view',
                '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            ),
        ),
    

    【讨论】:

    • 在您的用户模型或用户控制器的访问规则中正确分配了用户页面..?
    • 对不起,在控制器中,accessRules 在控制器中,请检查您的“用户页面”条目是否在正确的数组中。为了测试,我建议您将条目插入到无限制条目 (*) 中,这样您就不必担心身份验证..
    • 我已经尝试了所有这些事情,但我不知道为什么什么也没发生,我已经用我的 main..php 文件更新了问题,请看一下。
    • 您使用 RWebUser 组件将相关视图放在哪里?也给我看看控制器的名字..
    • 只是一个简单的问题。当您而不是 localhost/projectname/user/userpage?id="anyid" 调用 localhost/projectname/user/view?id="anyid" ... 一切正常时会发生什么?
    【解决方案2】:

    您还需要在 public function accessRules() 函数中注册您的 userpage 操作,没有它您将无法从 url 访问此操作。

    public function accessRules()
        {
            return array(
                array('allow',  // allow all users to perform 'index' and 'view' actions
                    'actions'=>array('index','view'),
                    'users'=>array('*'),
                ),
                array('allow', // allow authenticated user to perform 'create' and 'update' actions
                    'actions'=>array('create','update','userpage'),
                    'users'=>array('@'),
                ),
                array('allow', // allow admin user to perform 'admin' and 'delete' actions
                    'actions'=>array('admin','delete'),
                    'users'=>array('admin'),
                ),
                array('deny',  // deny all users
                    'users'=>array('*'),
                ),
            );
        }
    

    请注意,上述更改将只允许用户使用 userpage 操作,如果您希望它公开,请将其添加到 'users'=&gt;array('*'), 数组

    【讨论】:

    • 怎么做,能不能更新一下上面的代码。谢谢你
    • 这没有成功,仍然出现同样的错误,我在访问规则中复制了整个内容。看看有没有其他问题。
    • 当你访问url时,你没有登录吗?
    • 是的,我登录了..!!
    • 我认为这是您的项目文件夹名称在 url 中的问题,请尝试更改 config/routes.php 中的设置,例如 $config['base_url'] = "somesite.com/somedir";
    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-21
    相关资源
    最近更新 更多