2

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}
tara
  • 93
  • 2
  • 11

3 Answers3

2

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

csminb
  • 2,382
  • 1
  • 16
  • 27
1

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

Ebrahim Poursadeqi
  • 1,776
  • 2
  • 17
  • 27
  • no i edit my code my file savo to /frontend/web/uploads and i want show that in backend. how can do that?i want show this pic in frontend and backend together. – tara Jul 16 '17 at 15:50
  • its not parameter.you can see https://stackoverflow.com/questions/28797051/setting-aliases-in-yii2-within-the-app-config-file to set aliases – Ebrahim Poursadeqi Jul 16 '17 at 16:09
  • Dear @tara, unfortunately, I can't help you remotely because this post must help others too, so If you can you can give me some more detail of errors you got I can help your more – Ebrahim Poursadeqi Jul 19 '17 at 05:51
-1

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

amir ajlo
  • 124
  • 7