我一直在尝试这几个小时 - 我似乎无法找到任何有用的帖子。 我将自定义php类添加到Symfony2供应商目录。
例如(复制其他供应商结构):
的供应商/ MYLIB / MYLIB / SRC / MYLIB / LIB / Class.php 的
然后我通过添加:
更新了根composer.json"require": {
"mylib/mylib": "@dev"
},
我还在vendor / mylib / mylib中创建了一个composer.json,其中包含:
{
"name": "mylib/mylib",
"type": "library",
"description": "My Libraty",
"keywords": ["library"],
"autoload": {
"psr-0": { "Mylib\\": "src/" }
},
"minimum-stability": "dev"
}
我在Class.php中添加了一个名称空间:
namespace MyLib\Lib;
在我的一个捆绑包中,我添加了以下内容:
use MyLib\Lib\ClassName as ClassName;
class Cms extends ClassName
{}
我得到的错误是:
FatalErrorException:错误:找不到类'MyLib \ Lib \ MyClass' C:\ xampp \ htdocs \ My_CMS \ src \ Cms \ CmsBundle \ Entity \ Cms.php第13行
我做错了什么?
答案 0 :(得分:10)
你真的应该使用服务容器,这基本上是加载类的symfony方式。
这就是原因:
http://symfony.com/doc/current/book/service_container.html
A Service Container (or dependency injection container) is simply a PHP object that manages the instantiation of services (i.e. objects).
所以基本上symfony会在你的控制器中处理你的类的实例化。您需要做的就是:
在您的路径下添加一个名为Libraries的文件夹 - >的src /的appbundle /库
将类添加到此文件夹,并在顶部添加名称空间。 我的例子是:
<?php
namespace AppBundle\Libraries;
class MyRecommendations{
public function __construct(){
}
public function init(){
die("init");
}
}
然后将名为services.yml的文件添加到您的应用中。 应用程序/配置/ services.yml
将以下代码放入其中不要在yml文件中使用tabbing
services:
myrecommendations:
class: AppBundle\Libraries\MyRecommendations
#arguments: [specialparamhere] #constructor parameters here
然后将第三行资源:services.yml添加到config.yml文件中。
imports:
- { resource: parameters.yml }
- { resource: security.yml }
- { resource: services.yml }
使用时在控制器的顶部添加使用声明
use AppBundle\Libraries\MyRecommendations;
现在拨打你的代码
$test = $this->get('myrecommendations');
$test->init();
回声
init
答案 1 :(得分:4)
在php类中,通过__autoload
自动加载Symfony在Class Loader中关注它,但实际上它的工作方式相同。没有后台扫描所有目录,因此您必须手动添加命名空间。
您需要添加autoload.php文件:
$loader->add('NAMESPACE','/path/to/vendor');
答案 2 :(得分:0)
如果有另一个项目使用自动加载器加载其类,例如SimpleSAML,并希望在另一个名称空间的类中使用它:
namespace Study\UserBundle\Service;
require_once "/full_path/simplesaml/lib/_autoload.php";
use SimpleSAML_Configuration;
use SimpleSAML_Auth_Simple;
use SimpleSAML_Auth_State;
class SimpleSAMLLogin {
答案 3 :(得分:0)
最后的答案是正确的: https://stackoverflow.com/a/27768442/2400373
我为我工作然而重要的是补充说这是正确的,但如果你在安装库en autoload之前。 就我在Symfony 3.2.x中的情况而言,我添加了我的库en composer.json:
"autoload": {
"psr-4": { "": "src/" },
"classmap": [ "app/AppKernel.php", "app/AppCache.php","**src/AppBundle/juanitourquiza/pagopayphone/library"** ]
在这条指令之后:
composer update
然后一切都很好。
此致