tara
tara

Reputation: 93

yii2-advanced:how can i save image in backend and view that in backend and frontend?

hi i am save image in frontend and that show in frontend true and i test with many way to view that in backend but don't work. please help me

my controller in backend

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

url my backend and frontend is seperate

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

i test these soloution but didn't work true:

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

i inset two alias in aliases file in backend\config:

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

and use that in backend/web/index.php

require(__DIR__ . '/../config/aliases.php');

but i get this error:

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}

Upvotes: 2

Views: 2436

Answers (3)

csminb
csminb

Reputation: 2382

i'm pretty late to the party
but i got a few bones to pick with this solution provided.. so here it goes:

  1. you mention you have different front and back configurations
    so you are serving different folders for yii.com/:80 and yii.com/:81 respectively /frontend/web and /backend/web.
    keeping this in mind,
    no amount of aliases can make content of one of them available to the other.

  2. the yii-advanced-app has @frontend and @backend aliases defined in common/config/bootstrap

    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');
    

    DO NOT CHANGE THESE unless you know very well what you're doing.
    Yii is using these aliases to autoload classes defined under these namespaces common, frontend, backend and console. this exact thing is causing the ridiculous chain of "errors occurring while handling other errors"
    more details on Yii autloading documentaion


you can simply share content of these folders by creating a symlink from frontend/web/uploads to backend/web/uploads.

your webserver config (or .htaccess) will require the +FollowSymLinks option

Yii can manage this if you add a few lines to the environments/index.php file

'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',
    ]
],

and then run the init command again, just like in the installation guide (you do have to option to not overwrite local config files)
if you are running under windows, this might now ask you for elevated privileges

php init

or if you chose to make the symlinks manually you can try this quick guide

Upvotes: 2

amir ajlo
amir ajlo

Reputation: 124

create this function in components folder

   namespace common\components;

use Yii;

class Helper extends \yii\web\Request {

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

}

and use in backend :

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

notic: in frontend You do not need

Upvotes: -1

Ebrahim Poursadeqi
Ebrahim Poursadeqi

Reputation: 1816

you can try this solution :

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

and if you upload files in backend set the src parameter of image to

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

and if you save your files in frontend replace @backend with @frontend

Upvotes: 1

Related Questions