meo*_*ouw 13 php symfony silex
我正在尝试使用Silex php微框架创建扩展以进行用户身份验证,但我似乎无法使自动加载器工作.谁能摆脱任何光明?
我有这样的目录结构(截断)
usertest
|_lib
| |_silex.phar
| |_MyNamespace
| |_UserExtension.php
| |_User.php
|_www
|_index.php
Run Code Online (Sandbox Code Playgroud)
index.php的相关位,用作引导程序和前端控制器,如下所示:
require '../lib/silex.phar';
use Silex\Application;
use MyNamespace\UserExtension;
$app = new Application();
$app['autoloader']->registerNamespace( 'MyNamespace', '../lib' );
$app->register( new UserExtension() );
Run Code Online (Sandbox Code Playgroud)
我正在尝试加载的类看起来类似于:
namespace MyNamespace;
use Silex\Application;
use Silex\ExtensionInterface;
class UserExtension implements ExtensionInterface {
public function register( Application $app ) {
$app['user'] = $app->share( function() use( $app ) {
return new User();
});
}
}
Run Code Online (Sandbox Code Playgroud)
一切都很直接,除了它抛出这个错误:
Fatal error: Class 'MyNamespace\UserExtension' not found in /home/meouw/Projects/php/usertest/www/index.php on line 8
Run Code Online (Sandbox Code Playgroud)
我已经涉足了symfony2,并成功地遵循了设置通用类加载器的说明,但在这种情况下,我很难过.我错过了什么吗?任何帮助,将不胜感激.
Chr*_*isR 60
在Silex的最新版本中,自动加载器已弃用,您应该通过composer.jsonimo是一个更好的解决方案的文件注册所有命名空间,因为您正在集中自动加载定义.
例:
{
"require": {
"silex/silex": "1.0.*@dev"
},
"autoload": {
"psr-0": {
"MyNameSpace": "src/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
实际上,当您尝试在任何最新版本的Silex中访问自动加载器时,会抛出以下RuntimeException:
您试图访问自动加载器服务.自动加载器已从Silex中删除.建议您使用Composer来管理依赖项并处理自动加载.有关更多信息,请访问http://getcomposer.org.
mal*_*teo 11
我用了
$app['autoloader']->registerNamespace('MyNamespace', __DIR__.'/../lib');
Run Code Online (Sandbox Code Playgroud)
Rob*_*ert 11
Deprecated - As of 2014-10-21 PSR-0 has been marked as deprecated.
PSR-4 is now recommended as an alternative
Run Code Online (Sandbox Code Playgroud)
这就是你应该在composer.json中使用PSR-4语法的原因
{
"require": {
"silex/silex": "1.0.*@dev",
},
"autoload": {
"psr-4": {
"Vendor\\Namespace\\": "/path"
}
}
}
Run Code Online (Sandbox Code Playgroud)