Yii - 没有控制器的路线

时间:2013-12-17 06:55:15

标签: yii

我正在使用需要用户身份验证的现有上传脚本。但是,由于我没有编写上传脚本,因此我几乎不可能阅读源代码并将其转换为单独的视图和控制器文件。问题是如果脚本没有被引导程序文件路由,它就无法访问Yii变量,因此用户登录信息。

我尝试在用户登录时设置自定义会话变量。但它的工作原因很少,因为我的自定义会话将在Yii设置的会话之前到期。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

您正在使用带有mvc模式的框架,因此控制器是路由请求的首选方式。根据您的问题,我建议您使用htaccess文件来路由到所需文件并通过Yii处理其他文件

答案 1 :(得分:0)

将代码从现有源复制到新的Yii Controller / Action ...已完成:Dp>

答案 2 :(得分:0)

由于编写脚本的方式,我只能找到一种方法。它将涉及重写脚本的一些元素。

  1. 将文件管理器保存在protected / vendors。

  2. 您需要一个控制器来处理请求的路由。这也将为您提供所需的访问控制。将其命名为FileUpload并在通常在项目中创建控制器的位置创建它。在控制器的开头,在声明类之前,从它先前保存的位置导入fileUpload文件; Yii::import('application.vendors.*');

  3. 您需要一个操作来处​​理传入的请求。调用此actionIndex。给它以下代码。

    public function actionIndex() {
        //Start capturing the output from the script
        ob_start();
        require_once('filemanager/dialog.php');
    
        //Finish capturing output, and save to a variable
        $output = ob_end_clean();
        $this->render('index', array('output' => $output));
    }
    
  4. 然后你需要一个视图文件。称它为'output.php',它只包含一行; <?php echo $output; ?>

  5. 这将呈现脚本生成的html,并希望在现有模板中包含它。

    您的第一个问题是该脚本会发送ob_start不会丢弃的标头。您需要从脚本中删除这些内容。它也会启动一个会话,它会抛出一个错误'Session already started',这可以通过将config.php的第一行更改为

    来解决
    if(!isset($_SESSION)) 
        { 
            session_start(); 
        }
    

    您的下一个问题是没有加载任何脚本和样式表,因为供应商没有使用相对文件路径,还因为您刚刚删除了标题。您需要重新编写大量脚本以包含必要的文件。幸运的是,您现在可以访问Yii函数,因此可以使用资产管理器发布脚本所需的所有js和css文件。

    您的最终(希望!)问题将是脚本页面使用的网址。目前,他们都指向脚本中的文件。您需要重写这些以使用Yii路由。幸运的是,在主文件dialog.php中,您应该可以访问所有正常的Yii函数,因此您可以将$ baseUrl设置为$ this-&gt; createUrl()等。如果您需要向控制器添加额外的操作,您可以关注上面的模式调用其他文件,如脚本中的upload.php文件。

    希望一切都适合你!