2017-04-19 6 views
0

私はプログラムからOpenCartへのウェブのエクスポートを行っています。私は、ログインしようとしていますが、私は、このエラーメッセージが出ます:私たちは、子クラスのコンストラクタは、親に1を上書きすることを見つけるコンストラクタは、親クラスのコンストラクタを上書きします。そのため、親コンストラクタは実行されません。 OpenCart

PHP Fatal error: Call to a member function get() on null in /home/key2demo/domains/key2datafeed.com/public_html/ocdemoshops/oc23/system/engine/controller.php on line 10

を。親コンストラクタは実行されず、this-> registryも設定されません。

コントローラ内のコードは次のとおりです。私はそれにparent::__construct();を追加した場合

define("VERSION", "1.0"); 
    define("LANGUAGE", "1"); 

    if (is_file('./../admin/config.php')) { 
     require_once('./../admin/config.php'); 
    } 

    require_once(DIR_SYSTEM . 'startup.php'); 

    $application_config = 'admin'; 
    $registry = new Registry(); 

    $loader = new Loader($registry); 
    $registry->set('load', $loader); 

    $config = new Config(); 
    $config->load('default'); 

    $config->load($application_config); 
    $registry->set('config', $config); 
    $registry->set('request', new Request()); 
    $response = new Response(); 

    $response->addHeader('Content-Type: text/html; charset=utf-8'); 
    $registry->set('response', $response); 

    $registry->set('cache', new Cache($config->get('cache_type'), $config- 
    >get('cache_expire'))); 
    $registry->set('url', new Url($config->get('site_ssl'))); 

    $language = new Language($config->get('language_default')); 
    $language->load($config->get('language_default')); 

    $registry->set('language', $language); 
    $registry->set('document', new Document()); 

    $event = new Event($registry); 
    $registry->set('event', $event); 

    if ($config->get('db_autostart')) { 
     $registry->set('db', new DB($config->get('db_type'), $config- 
     >get('db_hostname'), $config->get('db_username'), $config- 
     >get('db_password'), $config->get('db_database'), $config- 
     >get('db_port'))); 
    } 

    if ($config->get('session_autostart')) { 
     $session = new Session(); 
     $session->start(); 
     $registry->set('session', $session); 
    } 

    if ($config->has('action_event')) { 
     foreach ($config->get('action_event') as $key => $value) { 
      $event->register($key, new Action($value)); 
     } 
    } 

    if ($config->has('config_autoload')) { 
     foreach ($config->get('config_autoload') as $value) { 
     $loader->config($value); 
     } 
    } 

    if ($config->has('language_autoload')) { 
     foreach ($config->get('language_autoload') as $value) { 
      $loader->language($value); 
     } 
    } 

    if ($config->has('library_autoload')) { 
     foreach ($config->get('library_autoload') as $value) { 
      $loader->library($value); 
     } 
    } 

    if ($config->has('model_autoload')) { 
     foreach ($config->get('model_autoload') as $value) { 
      $loader->model($value); 
     } 
    } 

    class K2P_API_OCWRITER extends Controller 
    { 

     private $errors; 
    private $admin; 
    private $adminValidated; 
    private $adminShops; 

    public function __construct() 
    { 
     $this->errors = array(); 
    } 

    public function doLog($message) 
    { 
     file_put_contents('./key2_log.txt', $message, FILE_APPEND); 
    } 

    public function login($usr, $pwd) 
    { 

     if ($this->user->login($usr, $pwd)) { 
      return true; 
      $this->doLog('logged in'); 
     } else { 
      $this->doLog('Failed to login, please supply a valid 
      username/password and check your webshop url'); 
      die; 
     } 

    } 

    public function getLanguages() 
    { 
    } 

    } 

    $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); 
    $registry->set('db', $db); 
    $registry->set('user', new Cart\User($registry)); 
    $registry->set('tax', new Cart\Tax($registry)); 

    $myAPI = new K2P_API_OCWRITER($registry); 
    $myAPI->config->set("config_language_id",LANGUAGE); 
    $command = $myAPI->cleanPost($_POST['command']); 
    $steps = $myAPI->cleanPost($_POST['steps']); 
    $page = $myAPI->cleanPost($_POST['page']); 
    $usr = $myAPI->cleanPost($_POST['usr']); 
    $pwd = $myAPI->cleanPost($_POST['pwd']); 
    //$myAPI->doLog(PHP_EOL . 'pages: ' . $page); 
    //$myAPI->doLog(PHP_EOL . 'steps: ' . $steps); 
    $totalProducts = $myAPI->getProductCount(); 
    if ($myAPI->checkInput($usr,$pwd,$command,$page,$steps)) { 
     if ($myAPI->login($usr, $pwd)) { 
      switch($command){ 
       case "getCategoryCount": 
        echo json_encode($myAPI->getCategoryCount(),JSON_FORCE_OBJECT 
        | JSON_UNESCAPED_SLASHES); 
       break; 
      case "getProductCount"; 
       echo json_encode($myAPI->getProductCount(),JSON_FORCE_OBJECT | 
       JSON_UNESCAPED_SLASHES); 
       break; 
      case "getCategories": 
       echo json_encode($myAPI->getCategories($steps, $page, 
       JSON_FORCE_OBJECT | JSON_UNESCAPED_SLASHES)); 
       break; 
      case "getProducts": 
       echo json_encode($myAPI->getProducts($steps, $page, 
       JSON_FORCE_OBJECT | JSON_UNESCAPED_SLASHES)); 
       break; 
      default: 
       echo "Invalid command!"; 
       break; 
     } 
    } 
    } 

<?php 
    abstract class Controller { 
     protected $registry; 

     public function __construct($registry) { 
      $this->registry = $registry; 
     } 

     public function __get($key) { 
      return $this->registry->get($key); 
     } 

     public function __set($key, $value) { 
      $this->registry->set($key, $value); 
     } 
    } 

これは私が作ったコードです。それでも動作しません。私はどちらを追加しなければならないか分からなかったので、私は両方を試しました。

私はこのようなコントローラにparent::__construct();を追加しました:その後、私はこのエラーメッセージを取得

<?php 
abstract class Controller { 
    protected $registry; 

    public function __construct($registry) { 
     parent::__construct(); 
     $this->registry = $registry; 
    } 

    public function __get($key) { 
     return $this->registry->get($key); 
    } 

    public function __set($key, $value) { 
     $this->registry->set($key, $value); 
    } 
} 

PHP Fatal error: Call to a member function get() on null in /home/key2demo/domains/key2datafeed.com/public_html/ocdemoshops/oc23/system/engine/controller.php on line 11

を、私はこのように私の作ったコードに追加した場合:

public function __construct() 
{ 
    parent::__construct(); 
    $this->errors = array(); 
} 

次に、このエラーメッセージが表示されます。

PHP Warning: Missing argument 1 for Controller::__construct(), called in /home/key2demo/domains/key2datafeed.com/public_html/ocdemoshops/oc23/key2publish/k2p_api_OCwriter.php on line 95 and defined in /home/key2demo/domains/key2datafeed.com/public_html/ocdemoshops/oc23/system/engine/controller.php on line 5

PHP Notice: Undefined variable: registry in /home/key2demo/domains/key2datafeed.com/public_html/ocdemoshops/oc23/system/engine/controller.php on line 6

PHP Fatal error: Call to a member function get() on null in /home/key2demo/domains/key2datafeed.com/public_html/ocdemoshops/oc23/system/engine/controller.php on line 10

これを修正する方法を知っている人はいますか?私は聞いています。

ありがとうございます!

+0

'コントローラ'コンストラクタは引数をとりますが、それを渡しますか? –

+0

どういう意味ですか? –

答えて

1

Controllerクラスのコンストラクタには、引数として$registryが必要です。あなたがControllerクラスの__constructを呼び出すときに、あなたが好きそれを呼び出す必要があります:

parent::__construct($registry); 

ので、ControllerができK2P_API_OCWRITERのためのあなたのコンストラクタ:

class K2P_API_OCWRITER extends Controller 
{ 
    public function __construct($registry) 
    { 
     // pass `$registry` to parent `__construct` 
     parent::__construct($registry); 
     $this->errors = array(); 
    } 
} 

そしてK2P_API_OCWRITERのオブジェクトをインスタンス化はまだです:

$myAPI = new K2P_API_OCWRITER($registry); 

そしてところでそれがそうであるように、Controllerコンストラクタでparent::__construct();を記述する必要はありませんクラスを拡張しないので、親を持たない。

関連する問題