Не могу загрузить класс огнестрельного оружия от поставщика - PullRequest
0 голосов
/ 09 марта 2019

Я создал пользовательский шаблон php mvc и пытаюсь загрузить mailgun, который был установлен с помощью composer в моем проекте, но я получаю сообщение об ошибке при открытии потока: нет такой ошибки файла или каталога, и я не могу ее устранить

Это структура моей страницы

My page structure

Public / index.php

<?php
require_once('../app/bootstrap.php');

 // Init Core Library
 $init = new Core;

app / library / core.php Это основной класс ядра приложения, который создает URL-адреса и загружает основные контроллеры, а также создает чистый формат URL-адреса

<?php

 class Core {
// Set Defaults
protected $currentController = 'Pages'; // Default controller
protected $currentMethod = 'index'; // Default method
protected $params = []; // Set initial empty params array

public function __construct(){
  $url = $this->getUrl();
  // Look in controllers folder for controller
  if(file_exists('../app/controllers/'.ucwords($url[0]).'.php')){
    // If exists, set as controller
    $this->currentController = ucwords($url[0]);
    // Unset 0 index
    unset($url[0]);
  }

  // Require the current controller
  require_once('../app/controllers/' . $this->currentController . '.php');

  // Instantiate the current controller
  $this->currentController = new $this->currentController;

  // Check if second part of url is set (method)
  if(isset($url[1])){
    // Check if method/function exists in current controller class
    if(method_exists($this->currentController, $url[1])){
      // Set current method if it exsists
      $this->currentMethod = $url[1];
      // Unset 1 index
      unset($url[1]);
    }
  }

  // Get params - Any values left over in url are params
  $this->params = $url ? array_values($url) : [];

  // Call a callback with an array of parameters
  call_user_func_array([$this->currentController, $this->currentMethod], $this->params);
}

// Construct URL From $_GET['url']
public function getUrl(){
    if(isset($_GET['url'])){
      $url = rtrim($_GET['url'], '/');
      $url = filter_var($url, FILTER_SANITIZE_URL);
      $url = explode('/', $url);
      return $url;
    }
}
}

app / library / mail.php

<?php
 use Mailgun\Mailgun;
 class Mail
  {

 public  function send($to, $subject, $text, $html)
  {

    $client = new GuzzleHttp\Client([
        'verify' => false,
    ]);
    $adapter = new Http\Adapter\Guzzle6\Client($client);

    $mg = new Mailgun(Config::MAILGUN_API_KEY, $adapter);
    $domain = Config::MAILGUN_DOMAIN;

    $mg->sendMessage($domain, ['from'    => 'test@test.com',
                               'to'      => $to,
                               'subject' => $subject,
                               'text'    => $text,
                               'html'    => $html]);

  }

}

app / bootstrap.php

<?php

// Load Config
require_once 'config/config.php';


 // Load Config
require_once 'config.php';

 //Load Vendor

require_once 'libraries/vendor/autoload.php';




// Autoload Core Libraries
 spl_autoload_register(function($className){
 require_once 'libraries/' . $className . '.php';
});

App / controllers / Pages.php

<?php

class Pages extends Controller{


public function __construct(){

     $this->shopModel = $this->model('Shop');
 }


 // Load Homepage
public function index(){


$mail = new  Mail();
$send = $mail->send('john_644@hotmail.com','test','this is 
test','<h1>this is test</h1>');

$this->view('shops/index' , $data); 
 }

}

Я создал класс конфигурации, который находится в корне приложения (App / config.php), он содержит ключ api mailgun и имя домена, которое будет вызываться в классе почты, расположенном в папке библиотеки.Файл composer.json находится в папке библиотек

error message

1 Ответ

2 голосов
/ 09 марта 2019

Проблема в том, что ваша функция автозагрузки в bootstrap.php, потому что composer уже создает функцию автозагрузки, все что вам нужно сделать, это вызвать поставщика autoload.php

удалить

// Autoload Core Libraries
spl_autoload_register(function($className){
require_once 'libraries/' . $className . '.php';
 });

И добавить это будет работать

<?php

 // Load Config
  require_once 'config/config.php';

 // Load Config
require_once 'config.php';

//Load Vendor
require_once 'libraries/vendor/autoload.php'; 
require_once 'libraries/Core.php';
require_once 'libraries/Mail.php'; 
...