问题
I am using symfony on Windows and I tried to configure FOSUserBundle as described in the official documentation.
I get this error when try to update the schema:
Class 'FOS\UserBundle\FOSUserBundle' not found in app/AppKernel.php line 20;
searched for the problem and find this solution: adding this to autoload.php
$loader->registerNamespaces(array(
//all the rest
'FOS' => $vendor_dir . '/bundles',
));
but it returns another error which says
call to undefined method ...\ClassLoader::RegisterNamespace() in ...\autoload.php on line 13
can anybody plz tell me what should i do?:|
and this is my appkernel.php file:
<?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 Sad\Bundle\WarehouseBundle\SadWarehouseBundle(),
new FOS\UserBundle\FOSUserBundle(),
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$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');
}
}
回答1:
I had the same problem. I found out that the FOSUserBundle was not properly installed. You should delete your /vendor/friendsofsymfony/ directory and then update the bundle using:
php composer.phar update friendsofsymfony/user-bundle
It worked for me. I hope it helps someone else having the same issue.
回答2:
Alright, there seems to be nothing wrong with your code.
Before we can get on the workarounds, let's try to reinstall your bundle, through the following steps:
- Remove that
$loader->registerNamespaces(...)
thing you added to autoloader.php. - Run
php composer.phar self-update
to update composer. - Remove the line
use FOS\UserBundle\FOSUserBundle(),
from AppKernel.php. - Run
php composer.phar update
to update all your bundles. - Clear your cache, running
php app/console cache:clear
. - Add the line
use FOS\UserBundle\FOSUserBundle(),
to AppKernel.php again.
Those should do it. If you still can't use the bundle and you need the workaround (which I wouldn't advice), this is the way to go:
Open app/autoload.php. Right after $loader = require __DIR__ . '/../vendor/autoload.php
. add the following:
//Loads FOSUserBundle
$loader->add('FOS', __DIR__.'/../vendor/friendsofsymfony/user-bundle/FOS');
Again, this should fix the issue and yet is not the correct way to do things. Your bundle should be working.
回答3:
To fix this error in Symfony 3.x
.
If composer
can not be executed and you can only transfer the files by FTP
, it's necessary to update the file:
vendor/composer
and maybe
vendor/symfony
(if the version is updated)
The same solution applies to this error
Fatal error: Class 'FOS \ JsRoutingBundle \ FOSJsRoutingBundle' not found
来源:https://stackoverflow.com/questions/17946989/fosuserbundle-not-found-in-appkernel