yii2-advanced:如何在后端保存图像并在后端和前端查看?

时间:2017-07-16 13:25:24

标签: yii2 frontend backend yii2-advanced-app

嗨,我在前端保存图片,并在前端显示为true,我用很多方式测试后端查看但不能正常工作。 请帮帮我

我的控制器在后端

Yii::$app->params['uploadPath'] =  Yii::getAlias('@frontend')  .'/web/uploads/';
          $path = Yii::$app->params['uploadPath'] . $model->image_web_filename;
           $image->saveAs($path);

url我的后端和前端是分开的

 backend:yii.com/:81
 frontend:yii.com

我测试了这些解决方案,但没有成功:

 https://stackoverflow.com/questions/23155428/how-to-get-root-directory-in-yii2

我在backend \ config中的别名文件中插入了两个别名:

Yii::setAlias('@frontend', 'http://frontend.sample.dev');
Yii::setAlias('@backend', 'http://backend.sample.dev');

并在backend / web / index.php

中使用它
require(__DIR__ . '/../config/aliases.php');

但是我收到了这个错误:

An Error occurred while handling another error:
exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "site/error".' in 
/var/www/blog/vendor/yiisoft/yii2/base/Module.php:532
Stack trace:
#0 /var/www/blog/vendor/yiisoft/yii2/web/ErrorHandler.php(95): 
yii\base\Module->runAction('site/error')
#1 /var/www/blog/vendor/yiisoft/yii2/base/ErrorHandler.php(111): 
yii\web\ErrorHandler->renderException(Object(yii\web\NotFoundHttpException))
#2 [internal function]: yii\base\ErrorHandler-
>handleException(Object(yii\web\NotFoundHttpException))
#3 {main}
Previous exception:
exception 'yii\base\InvalidRouteException' with message 'Unable to resolve the request "post/index".' in 
/var/www/blog/vendor/yiisoft/yii2/base/Module.php:532
Stack trace:
#0 /var/www/blog/vendor/yiisoft/yii2/web/Application.php(102): 
yii\base\Module->runAction('post/index', Array)
#1 /var/www/blog/vendor/yiisoft/yii2/base/Application.php(380): 
yii\web\Application->handleRequest(Object(yii\web\Request))
#2 /var/www/blog/backend/web/index.php(18): yii\base\Application->run()
#3 {main}

 Next exception 'yii\web\NotFoundHttpException' with message 'Page not 
 found.' in /var/www/blog/vendor/yiisoft/yii2/web/Application.php:114
 Stack trace:
#0 /var/www/blog/vendor/yiisoft/yii2/base/Application.php(380): 
yii\web\Application->handleRequest(Object(yii\web\Request))
#1 /var/www/blog/backend/web/index.php(18): yii\base\Application->run()
#2 {main}

3 个答案:

答案 0 :(得分:1)

你可以尝试这个解决方案:

Yii::setAlias('@frontend', 'http://frontend.sample.dev');
Yii::setAlias('@backend', 'http://backend.sample.dev');

如果您在后端上传文件,请将图片的src参数设置为

Yii::getAlias('@backend/path/to/your/image/file');

如果您将文件保存在前端,请将@backend替换为@frontend

答案 1 :(得分:1)

我参加聚会很晚了 但我有一些骨头可以选择this solution provided ..所以在这里:

  1. 你提到你有不同的前后配置
    因此,您分别为yii.com/:80yii.com/:81 /frontend/web/backend/web提供不同的文件夹。
    记住这一点,
    任何数量的别名都不能使其中一个的内容可供另一个使用。

  2. yii-advanced-app在common/config/bootstrap

    中定义了@frontend@backend个别名
    Yii::setAlias('@common', dirname(__DIR__));
    Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
    Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
    Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');
    

    请勿更改这些,除非您非常清楚自己在做什么 Yii正在使用这些别名来自动加载在这些命名空间common,frontend,backend和console下定义的类。这个确切的事情导致了“处理其他错误时发生错误”的荒谬链条 有关Yii autloading documentaion

  3. 的更多详情

    您可以通过创建从frontend/web/uploadsbackend/web/uploads的符号链接来简单地共享这些文件夹的内容。

    您的网络服务器配置(或.htaccess)将需要+FollowSymLinks选项

    如果您向environments/index.php文件添加几行

    ,Yii可以管理此项
    'Development' => [
        // .. other options
        'setWritable'            => [
            // .. leave the default stuff there
            'frontend/web/uploads',
        ],
        'createSymlink'          => [
            // link                =>   real folder
            'backend/web/uploads'  => 'frontend/web/uploads',
        ]
    ],
    'Production'  => [
        // .. 
        'setWritable'            => [
            // .. 
            'frontend/web/uploads',
        ],
        'createSymlink'          => [
            // link                =>   real folder
            'backend/web/uploads'  => 'frontend/web/uploads',
        ]
    ],
    

    然后再次运行init命令,就像在安装指南中一样(您必须选择不覆盖本地配置文件)
    如果您在Windows下运行,现在可能会要求您提升权限

    php init
    

    或者如果您选择手动制作符号链接,则可以尝试此quick guide

答案 2 :(得分:-1)

在组件文件夹

中创建此功能
   namespace common\components;

use Yii;

class Helper extends \yii\web\Request {

    public static function getFrontendUrl($path) {
        $frontUrl = str_replace('/adminpanel', '', $path);
        return $frontUrl;
    }

}

并在后端使用:

$ path \ common \ components \ Helper :: getFrontendUrl(Yii :: $ app-> request-> baseUrl)。$ img;

  

notic:在前端你不需要