2011-06-06 44 views

回答

10

您可以在Symfony 1.4框架中使用Symfony2中的Autoloader。

1.複製Symfony2的類加載器到你的Symfony 1.4沙箱項目的供應商目錄:

SF_ROOT_DIR/lib中/供應商/ Symfony2的/ src目錄/ Symfony的/組件/類加載器/ UniversalClassLoader.php

SF_ROOT_DIR/lib中/供應商/ Symfony2的/ src目錄/ Symfony的/組件/類加載器/ ApcUniversalClassLoader.php

2.修改你的S F_ROOT_DIR /配置/ ProjectConfiguration.class.php文件,如下所示:

require_once dirname(__FILE__) . '/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php'; 
require_once dirname(__FILE__) . '/../lib/autoload/sfClassLoader.class.php'; 
sfCoreAutoload::register(); 

class ProjectConfiguration extends sfProjectConfiguration { 

    public function setup() { 
     $this->namespacesClassLoader(); 
     $this->enablePlugins('sfDoctrinePlugin'); 
    } 

    public function namespacesClassLoader() { 
     if (extension_loaded('apc')) { 
      $loader = new ApcUniversalClassLoader('S2A'); 
     } else { 
      $loader = new UniversalClassLoader(); 
     } 
     $loader->registerNamespaces(array(
      'Pohon' => __DIR__ . '/../lib/vendor/Pohon/src')); 
     $loader->register(); 
    } 

} 

3.註冊所需的命名空間:
如。我想加載類:

Pohon \ Tools \ String \ Utils \ Slugify。

文件名必須是:

SF_ROOT_DIR/LIB /供應商/ Pohon/SRC/Pohon /工具/字符串/的Utils/Slugify.php

和註冊名稱空間,如下所示:

Pohon => SF_ROOT_DIR/LIB /供應商/ Pohon/SRC

+0

Autoloader項目可以在這裏找到:https://github.com/Symfony-Plugins/sfClassLoaderPlugin。 – 2012-12-21 02:26:48

+0

Breautiful,謝謝!我不得不添加'使用Symfony \ Component \ ClassLoader \ UniversalClassLoader; 使用Symfony \ Component \ ClassLoader \ ApcUniversalClassLoader;在ProjectConfiguraration.class.php文件中導入之後。另外,下面是ClassLoader bundle的鏈接(在這些類被棄用之前):https://github.com/symfony/ClassLoader/tree/2.6 – GermanK 2015-03-29 17:58:29

1

Symfony使用spl_autoload_register()函數來註冊自己的自動裝載器(sfAutoload)。

您可以在Project/Application/Plugin的initialize()函數中註冊您自己的處理函數。 (以適用者爲準)。

例如,這也是Swift_Mailer插件的作用:它在需要時註冊自己的自動裝載器。

5

您可以使用Composer,這很容易。只要你的機器上安裝它(你可能已經因爲它是2015年至今),並在你的項目文件夾中運行:

composer init 

然後,您可以安裝所有你想與作曲家,包括您在ProjectConfiguration.class.php只是這一行的包:

require_once __DIR__.'/../vendor/autoload.php'; 

請注意,如果更改默認的Symfony1.4目錄結構,路徑可能會有所不同。

+0

Symfony 1.4不知道如何在命名空間中加載類,您必須實現此功能。 Composer只是一個package/lib管理器。 – 2015-04-09 23:33:48

+1

Composer確實也提供ClassLoader,當您安裝(使用Composer俚語「require」)包時,您只需要在上面包含'vendor/autoload.php'腳本。 Composer負責映射所有已安裝軟件包中的名稱空間。你試過了嗎?我這樣做,它很好地工作。 – ggioffreda 2015-04-10 01:45:12

+0

感謝您爲我解決這個問題。您需要指定vendor-dir:「lib/vendor」以在sf 1.4的原始供應商目錄中擁有庫;用於amp-library,它工作正常。 – Naeh 2016-08-10 11:54:22

相關問題