为什么我的插件无法在生产环境中加载?
Why doesn't my plugin load in production?
我需要在我的应用程序的联系表单中实施 Google reCaptcha,因此我尝试安装一个简单的 reCaptcha 插件(这个似乎很简单:https://github.com/agiletechvn/Recaptcha)。所以我按照说明去做了。
我用 composer 安装它,用 bin/cake 插件加载它,验证有一个“$this->addPlugin('Recaptcha');”在我的 Application.php 中对我的控制器和视图进行了适当的更改。在 localhost 中,一切似乎都运行良好(并且 debugkit 告诉我插件正在正确加载),但是作为一个 reCaptcha,我无法测试它,除非它是一个实时服务器。所以我上传了所有文件(包括 vendor 中的相应文件夹并更新了 cakephp-plugins.php 文件)。问题是它一直给我一个“找不到组件 class RecaptchaComponent。”错误。我遗漏或放错了什么地方?
我的控制器:
class ClientsController extends AppController
{
public function initialize() {
parent::initialize();
$this->loadComponent('Recaptcha.Recaptcha', [
'enable' => true,
'sitekey' => '6Lf2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //the sitekey I got from the Google reCaptcha API
'secret' => '6Lf2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //the secret key I got from the Google reCaptcha API
'type' => 'image',
'theme' => 'light',
'lang' => 'en',
'size' => 'compact'
]);
}
public function contact()
{
$client = $this->Clients->newEntity();
if ($this->request->is('post')) {
if ($this->Recaptcha->verify()) {
$client = $this->Clients->patchEntity($client, $this->request->getData());
if ($this->Clients->save($client)) {
$this->Flash->success('Your message has been saved.');
$this->redirect($this->referer());
} else {
$this->Flash->error('There was a problem with the Contact Form. Please retry.');
$this->redirect($this->referer());
}
} else {
$this->Flash->error('Verify the Google Recaptcha before continuing.');
}
}
$this->set(compact('client'));
}
}
我的看法:
<?= $this->Form->create($client); ?>
<?= $this->Form->control('first_name',['label' => 'Firt name:']); ?>
<?= $this->Form->control('last_name',['label' => 'Last name:']); ?>
<?= $this->Form->control('email', ['label' => 'Email:']) ?>
<?= $this->Form->control('phone', ['label' => 'Phone number:']) ?>
<?= $this->Form->control('comments', ['label' => 'Message:','rows' => 3]) ?>
<?= $this->Recaptcha->display(); ?>
<?= $this->Form->button('Send') ?>
<?= $this->Form->end(); ?>
我得到的错误:
Error: [Cake\Controller\Exception\MissingComponentException] Component
class RecaptchaComponent could not be found.
(/home1/viajejuw/public_html/vendor/cakephp/cakephp/src/Controller/ComponentRegistry.php:101)
免责声明:我在生产服务器中没有可用的终端连接。
听起来您可能没有上传更新的自动加载器文件。不要只传输选定的供应商文件,如果您没有 shell 访问权限并且无法在您的服务器上 运行 作曲家,您应该传输 所有 供应商文件,除非您有一种万无一失的方法来跟踪哪些文件已被更改。
如果 class 在您的目标环境中缺失,但在您的本地环境中存在,则在 10 个案例中有 9 个是文件未上传、权限错误、不存在在自动加载器中,或者存在与区分大小写的文件系统不兼容的拼写错误。
我需要在我的应用程序的联系表单中实施 Google reCaptcha,因此我尝试安装一个简单的 reCaptcha 插件(这个似乎很简单:https://github.com/agiletechvn/Recaptcha)。所以我按照说明去做了。
我用 composer 安装它,用 bin/cake 插件加载它,验证有一个“$this->addPlugin('Recaptcha');”在我的 Application.php 中对我的控制器和视图进行了适当的更改。在 localhost 中,一切似乎都运行良好(并且 debugkit 告诉我插件正在正确加载),但是作为一个 reCaptcha,我无法测试它,除非它是一个实时服务器。所以我上传了所有文件(包括 vendor 中的相应文件夹并更新了 cakephp-plugins.php 文件)。问题是它一直给我一个“找不到组件 class RecaptchaComponent。”错误。我遗漏或放错了什么地方?
我的控制器:
class ClientsController extends AppController
{
public function initialize() {
parent::initialize();
$this->loadComponent('Recaptcha.Recaptcha', [
'enable' => true,
'sitekey' => '6Lf2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //the sitekey I got from the Google reCaptcha API
'secret' => '6Lf2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', //the secret key I got from the Google reCaptcha API
'type' => 'image',
'theme' => 'light',
'lang' => 'en',
'size' => 'compact'
]);
}
public function contact()
{
$client = $this->Clients->newEntity();
if ($this->request->is('post')) {
if ($this->Recaptcha->verify()) {
$client = $this->Clients->patchEntity($client, $this->request->getData());
if ($this->Clients->save($client)) {
$this->Flash->success('Your message has been saved.');
$this->redirect($this->referer());
} else {
$this->Flash->error('There was a problem with the Contact Form. Please retry.');
$this->redirect($this->referer());
}
} else {
$this->Flash->error('Verify the Google Recaptcha before continuing.');
}
}
$this->set(compact('client'));
}
}
我的看法:
<?= $this->Form->create($client); ?>
<?= $this->Form->control('first_name',['label' => 'Firt name:']); ?>
<?= $this->Form->control('last_name',['label' => 'Last name:']); ?>
<?= $this->Form->control('email', ['label' => 'Email:']) ?>
<?= $this->Form->control('phone', ['label' => 'Phone number:']) ?>
<?= $this->Form->control('comments', ['label' => 'Message:','rows' => 3]) ?>
<?= $this->Recaptcha->display(); ?>
<?= $this->Form->button('Send') ?>
<?= $this->Form->end(); ?>
我得到的错误:
Error: [Cake\Controller\Exception\MissingComponentException] Component class RecaptchaComponent could not be found. (/home1/viajejuw/public_html/vendor/cakephp/cakephp/src/Controller/ComponentRegistry.php:101)
免责声明:我在生产服务器中没有可用的终端连接。
听起来您可能没有上传更新的自动加载器文件。不要只传输选定的供应商文件,如果您没有 shell 访问权限并且无法在您的服务器上 运行 作曲家,您应该传输 所有 供应商文件,除非您有一种万无一失的方法来跟踪哪些文件已被更改。
如果 class 在您的目标环境中缺失,但在您的本地环境中存在,则在 10 个案例中有 9 个是文件未上传、权限错误、不存在在自动加载器中,或者存在与区分大小写的文件系统不兼容的拼写错误。