Phalcon框架资产管理器:当输出

时间:2017-10-19 02:09:08

标签: php phalcon

我是phalcon框架的新手,但看起来很棒!

最近我决定在我的项目中使用资产管理器但是出现了问题。 当我尝试输出添加的资产时,会打印前面带有“ /index.php ”的路径......

我将此代码放入控制器的indexAction:

$this->assets
   ->collection("commonJs")
   ->addJs('js/draggable.js')
   ->addJs('js/common.js')
   ->addFilter( new Phalcon\Assets\Filters\Jsmin()  );

$this->assets
    ->collection('commonCss')
    ->addCss('css/material-icons.css',true,false)
    ->addcss('css/common.css',true,true)
    ->addFilter(new Phalcon\Assets\Filters\Cssmin());

并使用内部伏特来输出资产:

 <head>
 ....
 {{ assets.outputJs('commonJs')}}
 </head>
 <body>
 ...
 {{ assets.outputJs('commoCss')}}
 </body>

但打印输出看起来有点奇怪:

我认为它应该打印像

这样的路径
<link rel="stylesheet" type='text/css'  href='css/common.css'> 

 <script type='text/javascript' src='js/common.js'>

但实际输出如下:

 <link rel="stylesheet" type='text/css'  href='/index.phpcss/common.css'> 
..
 <script type='text/javascript' src='/index.phpjs/common.js'>

或者如果我在addJs中设置路径,比如'/ js / ...'而不是'js / ...' 然后输出是:

 <script type='text/javascript' src='/index.php/js/...'>

我是phalcon的新手,我不知道我做错了什么,以及如何在输出路径中删除prepended index.php。

有人可以帮我解决这个问题吗?

仅供参考,我正在使用nginx和php7.1&amp; fpm和我的nginx-site.conf如下所示,几乎与phalcon文档相同:

server {
         listen       80;
         root /var/www2/public;
         index index.html index.htm index.php;

         # Make site accessible from http://localhost/
         server_name tpnew.dev;

     error_log  /usr/local/var/log/nginx/newtp.error.log; #debug;
     log_not_found off;


     location / {
         try_files $uri $uri/ /index.php?_url=$uri&$args;
     #   try_files $uri $uri/ @rewrite;
     }

 location ~ \.php$ {
     try_files      $uri = 404;
     fastcgi_pass   127.0.0.1:9000; # php71
     fastcgi_index  /index.php;
     fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include        fastcgi_params;

     fastcgi_split_path_info  ^(.+\.php)(/.+)$;
     fastcgi_param PATH_INFO       $fastcgi_path_info;
     fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
     fastcgi_param SERVER_NAME $server_name;
 }
     location ~ /\.ht {
         deny all;
     }

 }

4 个答案:

答案 0 :(得分:0)

在您的Nginx配置中,尝试将此行fastcgi_index /index.php;更改为fastcgi_index /;

答案 1 :(得分:0)

我也有这个问题,而不是修改webserver配置,我编辑了config.php baseUri条目,如下所示:

在:

'baseUri' => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),

后:

'baseUri' => preg_replace(['/public([\/\\\\])index.php$/', '@/index.php@i'], '', $_SERVER["PHP_SELF"]),

所以基本上只是确保从PHP_SELF字段中删除单个/index.php

答案 2 :(得分:0)

要从生成的URL中删除index.php,请在baseUri上更改config.php

旧版:'baseUri' => preg_replace('/public([\/\\\\])index.php$/', '', $_SERVER["PHP_SELF"]),

新功能:'baseUri' => preg_replace(['/public([\/\\\\])index.php$/', '@/index.php@i'], '/', $_SERVER["PHP_SELF"]),

  

radonthetyrant 已经提到了类似的答案,但是生成了 projectnamecontroller URL。但是我需要 project / controller 。所以我更改为此配置。

答案 3 :(得分:0)

我这样做了:

$headerJs = $this->assets->collection('headerJs')->setPrefix('/')->setLocal(false);
    .....

    $headerJs->addJs('js/library/jquery.min.js');