Symfony和普通php自动加载类
我有一个旧代码的应用程序-普通php和新代码-Symfony。当在旧的代码调用类symfony autoloader中截取类时,如何告诉symfony调用非常需要的类 我有来自旧代码的Symfony和普通php自动加载类,php,symfony,Php,Symfony,我有一个旧代码的应用程序-普通php和新代码-Symfony。当在旧的代码调用类symfony autoloader中截取类时,如何告诉symfony调用非常需要的类 我有来自旧代码的app/old/core/classes/Locale.php,没有名称空间和 app/src/AppBundle/Entity/Locale.php根据新代码,这是带有名称空间的实体 在旧代码中,我从旧代码中调用静态函数Locale,但是Symfony调用entity,当然entity Locale没有这个静态函
app/old/core/classes/Locale.php
,没有名称空间和
app/src/AppBundle/Entity/Locale.php
根据新代码,这是带有名称空间的实体
在旧代码中,我从旧代码中调用静态函数Locale,但是Symfony调用entity,当然entity Locale没有这个静态函数,我有错误
class Page
{
function replacePageTags($replace_arr)
{
// set brases for keys
$braced_arr = Array();
foreach($replace_arr as $key => $value) {
$braced_arr["{".$key."}"] = $value;
}
//this I have error
$this->content = Locale::replaceTags($this->content, $braced_arr);
}
}
错误消息:
试图调用类“Locale”的名为“replaceTags”的未定义方法
我何时将include Locale添加到类页面
include('Locale.php');
class Page
{
出错
错误:无法声明类区域设置,因为该名称已在使用中
但是当我添加到实体静态函数replaceTags($text,$replace\u arr)
时仍然有错误,可能Symfony调用了另一个区域设置,但我需要从旧功能调用区域设置,我该怎么做
也许这是因为在自动加载中的composer中
"autoload": {
"psr-4": {
"": "src/"
}
但是旧代码不在src中,或者我不知道
在另一个开发人员没有这个问题,我有php版本7.0.14,他们有7.0.8,也许我需要一些低ph值破坏,我不知道(
如何在旧代码中调用急需的类或修复此问题?如果旧库没有名称空间,可以使用来进行映射
require_once '/path/to/src/Symfony/Component/ClassLoader/MapClassLoader.php';
$mapping = array(
'Foo' => '/path/to/Foo',
'Bar' => '/path/to/Bar',
);
$loader = new MapClassLoader($mapping);
$loader->register();
您可以使用在旧代码上自动执行此操作。
通过这种方式,您可以为所有旧类创建一个自定义名称空间,如
Legacy\Class
,如果您的旧库没有名称空间,您可以使用它进行映射
require_once '/path/to/src/Symfony/Component/ClassLoader/MapClassLoader.php';
$mapping = array(
'Foo' => '/path/to/Foo',
'Bar' => '/path/to/Bar',
);
$loader = new MapClassLoader($mapping);
$loader->register();
您可以使用在旧代码上自动执行此操作。
通过这种方式,您可以为所有旧类创建一个自定义名称空间,如
Legacy\Class
,您的页面
类从扩展中使用的名称空间
您唯一的选择是禁用扩展,因为由于类名冲突,遗留(无名称空间)代码与它不兼容。您的
页面
类使用扩展
您唯一的选择是禁用扩展,因为由于类名冲突,遗留(无命名空间)代码与它不兼容。请在问题中添加实际的错误消息。是否启用了扩展?错误消息
试图调用类“Locale”的名为“replaceTags”的未定义方法.
因为symfony调用了另一个名为Locale的cals,我想扩展名是什么?你确认php-m | grep intl
没有返回任何内容吗?@AlexBlex我认为这与symfony Locale无关,他有自定义classes@AlexBlexintl
我有个问题,请在问题中添加实际的错误信息。你有没有启用张力?错误消息试图调用类“Locale”的名为“replaceTags”的未定义方法.
因为symfony调用了另一个名为Locale的cals,我想扩展名是什么?你确认php-m | grep intl
没有返回任何内容吗?@AlexBlex我认为这与symfony Locale无关,他有自定义classes@AlexBlexintl
我有intlIf如果是这个问题,我建议使用composer来映射类Instead.如果是问题,我建议使用composer来映射类。如何禁用扩展?这取决于您是如何安装的。pecl uninstall intl
,apt get remove php5 intl
等。如果您可以在php配置中找到类似intl.ini
的内容,例如/etc/php5/mods可用
,您可以对其进行注释out liek;extension=intl.ini
如何禁用扩展?这取决于您是如何安装的。pecl uninstall intl
,apt get remove php5 intl
等。如果您可以在php配置中找到类似intl.ini
的内容,例如/etc/php5/mods可用
,您可以将其注释掉liek;extension=intl.ini