Phalcon框架 资产管理器:输出时"/index.php"总是在资产路径中加上前缀



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

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

我将这段代码放入控制器的 indexAction 中:

$this->assets
   ->collection("commonJs")
   ->addJs('js/draggable.js')
   ->addJs('js/common.js')
   ->addFilter( new PhalconAssetsFiltersJsmin()  );
$this->assets
    ->collection('commonCss')
    ->addCss('css/material-icons.css',true,false)
    ->addcss('css/common.css',true,true)
    ->addFilter(new PhalconAssetsFiltersCssmin());

并使用此内部 Volt 来输出资产:

 <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 的新手,我不知道我做错了什么以及如何在输出路径中删除前置索引.php。

有人可以帮我吗?

仅供参考,我将nginx与php7.1和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;
     }
 }

我也遇到了这个问题,我没有修改 Web 服务器配置,而是像这样编辑了 config.php baseUri 条目:

以前:

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

后:

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

所以基本上只是确保,单个/index.php 也从PHP_SELF字段中剥离

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

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

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

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

radonthetyrant已经提到了类似的答案,但生成项目名称控制器URL。 但我需要项目/控制器。 所以我改成了这个配置。

我这样做了:

$headerJs = $this->assets->collection('headerJs')->setPrefix('/')->setLocal(false);
    .....
    $headerJs->addJs('js/library/jquery.min.js');

最新更新