2015-10-11 35 views
0

同時把我的應用程序在生產中,我不得不通過FTP傳輸JMS串行器,因爲我無法在生產服務器上使用作曲家。Symfony - ClassNotFoundException在AppKernel.php

它的工作,我看到它在供應商。

我AppKernel是一樣的地方(如果它的工作原理,在生產和開發環境測試):

<?php 

use Symfony\Component\HttpKernel\Kernel; 
use Symfony\Component\Config\Loader\LoaderInterface; 

class AppKernel extends Kernel 
{ 
public function registerBundles() 
{ 
    $bundles = array(
     new Symfony\Bundle\FrameworkBundle\FrameworkBundle(), 
     new Symfony\Bundle\SecurityBundle\SecurityBundle(), 
     new Symfony\Bundle\TwigBundle\TwigBundle(), 
     new Symfony\Bundle\MonologBundle\MonologBundle(), 
     new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(), 
     new Symfony\Bundle\AsseticBundle\AsseticBundle(), 
     new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(), 
     new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(), 
     new Doctrine\Bundle\FixturesBundle\DoctrineFixturesBundle(), 
     new FOS\JsRoutingBundle\FOSJsRoutingBundle(), 
     new Hager\TransformationBundle\TransformationBundle(), 
     new JMS\SerializerBundle\JMSSerializerBundle() 
    ); 

    if (in_array($this->getEnvironment(), array('dev', 'test'))) { 
     $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); 
     $bundles[] = new Acme\DemoBundle\AcmeDemoBundle(); 
     $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 
     $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle(); 
     $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle(); 
    } 

    return $bundles; 
} 

public function registerContainerConfiguration(LoaderInterface $loader) 
{ 
    $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml'); 
} 
} 

,但我收到的AppKernel一個很奇怪的

的ClassNotFoundException。 php第22行: 試圖從名稱空間「JMS \ SerializerBundle」加載類「JMSSerializerBundle」。 你忘記了另一個命名空間的「使用」語句嗎?

由於控制檯在生產服務器上不可用,我做了rm -RF /app/cache/*但仍然出現錯誤。

幫助非常好。

+0

看起來類加載器沒有加載JMSSerializer類。您是否在生產環境中更新了composer.json和composer.lock文件,或者您只是將jms序列化程序上傳到供應商文件夾? – viktor77

+0

他說他不能在生產服務器上使用作曲家 –

+0

我不能在生產中使用作曲家,所以是的,我只是ftp上傳它在供應商文件夾。 –

回答

1

再次上傳vendor/composer目錄。

並上傳您的web目錄,因爲可能有新的資產。

然後去app/cache並刪除裏面的一切。

另一種方法:

下載並安裝CoreSphere ConsoleBundle

在app_dev.php添加您的IP地址:

if (isset($_SERVER['HTTP_CLIENT_IP']) 
    || isset($_SERVER['HTTP_X_FORWARDED_FOR']) 
    || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1', '100.200.300.400')) || php_sapi_name() === 'cli-server') 
) 

(替換100.200.300.400爲自己的IP),並上傳這個文件到服務器。然後訪問您的網站app_dev.php/_console,您可以從那裏執行您的控制檯命令。

1

你說你不能在你的prod服務器上運行Composer(爲什麼?!)。在這種情況下,即使您將JMS序列化程序文件複製到供應商目錄,它們也不會被作曲程序生成的自動加載程序自動加載。您將需要編輯autoload_namespaces.php文件在您vendor/composer目錄,並添加此行:

'JMS\\SerializerBundle' => array ($vendorDir . '/jms/serializer-bundle'), 
0

不要重命名或更換Comoser.lock andcomposer.json文件。 安裝新項目symfony new project並將破損項目中的文件夾替換爲新的:app,src,web。

相關問題