Почему мой плагин не загружается в производство?

Мне нужно реализовать Google reCaptcha в контактных формах моего приложения, поэтому я попытался установить простой плагин reCaptcha (этот, казалось, был достаточно простым: https://github.com/agiletechvn/Recaptcha). Итак, я выполнил инструкции.

Я установил его с помощью composer, загрузил его загрузкой плагина bin / cake, убедился, что есть "$this->addPlugin('Recaptcha');" в моем Application.php и внес соответствующие изменения в мой контроллер и представление. В localhost все работает нормально (и debugkit сообщает мне, что плагин загружается правильно), но, будучи reCaptcha, я не могу его протестировать, если это не рабочий сервер. Итак, я загрузил все файлы (включая соответствующую папку в vendor и обновил файл cakephp-plugins.php). Проблема в том, что он продолжает выдавать мне "Класс компонента 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(); ?>

Я получаю ошибку:

Ошибка: [Cake\Controller\Exception\MissingComponentException] Класс компонента RecaptchaComponent не найден. (/home1/viajejuw/public_html/vendor/cakephp/cakephp/src/Controller/ComponentRegistry.php:101)

Отказ от ответственности: у меня нет терминального соединения на производственном сервере.

1 ответ

Решение

Похоже, вы не загрузили обновленные файлы автозагрузчика. Не просто переносите выбранные файлы поставщика, если у вас нет доступа к оболочке и вы не можете запустить composer на своем сервере, вам следует передать все файлы поставщика, если у вас нет надежного способа отслеживания, какие файлы были изменены.

В 9 из 10 случаев, когда класс отсутствует в вашей целевой среде, но он присутствует в вашей локальной среде, файл либо не был выгружен, имеет неправильные разрешения, отсутствует в автозагрузчике, либо имеется опечатка это несовместимо с файловыми системами с учетом регистра.

Другие вопросы по тегам