我有一个Symfony 4的应用程序,它已经完成并可以使用。任何上传的文件都放在doc根目录外的upload文件夹中,并通过一个单独的cdn网址访问。
在upload文件夹中,我有一个htaccess文件,它可以重定向任何请求,比如说图片,重定向到一个php文件,然后再为图片服务。
我想做的是在请求图片的同时发送一个认证密钥,这样独立的index.php文件就可以从数据库中检查用户是否有效。
这意味着我需要通过某种方式从symfony之外访问symfony实体管理器,包括它。另一个选择是通过curl请求到symfony控制器,但如果可能的话,我不想增加额外的网络请求。第三种选择是直接通过单独的PDO访问数据库,并进行sql查询......但我还是希望通过包含symfony来使用symfony实体管理器,这样我就可以在需要时使用其他功能。
实际上,我试过在index.php中加入symfony bootstrap,但那会拖累路由工作的需要,而在这种情况下并不需要。
你可以这样访问EntityManager。
require __DIR__.'/../vendor/autoload.php';
(new Dotenv())->load(__DIR__.'/../.env');
$kernel = new Kernel('dev', true);
$kernel->boot();
$user = $kernel->getContainer()->get('doctrine.orm.entity_manager')->getRepository(Repo::class)->find(id);
dd($user->getRoles());