2013-12-17 58 views
0

我正在使用需要用户身份验证的现有上载脚本。但是由于我没有编写上传脚本,因此我几乎不可能读取源代码并将其编译到单独的视图和控制器文件中。问题是如果脚本没有通过引导文件路由,它不能访问Yii变量,从而用户登录信息。Yii - 无控制器路由

我尝试在用户登录时设置自定义会话变量。然而,它几乎没有工作,因为我的自定义会话会在Yii设置的会话之前过期。

任何帮助,将不胜感激。

+1

请用更多的努力和形象化的方式阐述你的问题。 –

+0

好吧,让我们再试一次。如果我没有控制器和视图文件,我怎么能创建一条路径让Yii直接到服务器上的脚本文件(例如localhost/upload.php) – Romed7442

+0

您的Yii应用程序可以访问与上传脚本相同的数据库? –

回答

0

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

  1. 将filemanager保存在受保护的/ vendor中。

  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; ?>

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

您的第一个问题是脚本发送的标头不会被ob_start丢弃。您需要从脚本中删除这些内容。它还会启动一个会话,它会抛出“会话已经开始”的错误,这可以通过改变config.php文件的第一行被固化,以

if(!isset($_SESSION)) 
    { 
     session_start(); 
    } 

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

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

希望所有适合你的!

0

确定使用MVC模式框架一所以控制器为佳方式将请求路由。作为每您的问题,我建议你使用htaccess文件做路由到所需的文件,被Yii

0
处理其他文件

从现有源复制代码到新的Yii控制器/操作...完成:D