मेरी समस्या:
तो, मैं एक वर्ग 'होम' कहा जाता है और यह वर्ग 'नियंत्रक' नियंत्रक वर्ग फैली एक निर्माता में सभी मॉडलों की आवश्यकता है। यह ठीक काम करता है।पीएचपी - वर्ग, विस्तारित वर्ग के निर्माता फोन नहीं करता है, जबकि यह एक अन्य वर्ग में ठीक काम करता है
अब मेरे पास 'लॉग इन' नामक दूसरी श्रेणी है, यह कक्षा 'नियंत्रक' भी फैली हुई है, लेकिन यह कन्स्ट्रक्टर को कॉल नहीं करती है, और मैं उलझन में हूं कि यह इस वर्ग में कन्स्ट्रक्टर को क्यों नहीं बुला रहा है।
मुझे एक वर्कअराउंड मिला है और यह है कि जब मैं ऐसा करता हूं तो Parent::__construct()
के साथ लॉगिन क्लास में एक कन्स्ट्रक्टर बनाना है, सबकुछ ठीक काम करता है।
लेकिन मैं काम कर रहा हूं कि यह होम क्लास में क्यों काम करता है, और यह लॉगिन कक्षा में काम नहीं कर रहा है।
कुछ जानकारी:
घर नियंत्रक: (बिना किसी समस्या के एक)
पश्व-अनुरेखन जब मैं विस्तारित वर्ग के निर्माता कॉल करने के लिए मजबूर नहीं है:
0 Core\Controller->__construct() called at [/var/www/html/site.luukwuijster.eu/core/Router.php:26] #1 App->__construct() called at [/var/www/html/site.luukwuijster.eu/public/index.php:5]
बैकट्रैक जब मैं विस्तारित कक्षा के निर्माता को कॉल करने के लिए मजबूर कर रहा हूं:
0 Core\Controller->__construct() called at [/var/www/html/site.luukwuijster.eu/app/controllers/home.php:12] #1 Home->__construct() called at [/var/www/html/site.luukwuijster.eu/core/Router.php:26] #2 App->__construct() called at [/var/www/html/site.luukwuijster.eu/public/index.php:5]
लॉग इन नियंत्रक: (समस्याओं के साथ एक)
जब मैं विस्तारित वर्ग के निर्माता कॉल करने के लिए मजबूर कर रहा नहीं कर रहा हूँ: जब मैं निर्माता कॉल करने के लिए मजबूर कर रहा हूँ
Fatal error: Uncaught Error: Class 'App\User' not found in /var/www/html/site.luukwuijster.eu/app/controllers/login.php:21 Stack trace: #0 /var/www/html/site.luukwuijster.eu/core/Router.php(26): Login->login() #1 /var/www/html/site.luukwuijster.eu/public/index.php(5): App->__construct() #2 {main} thrown in /var/www/html/site.luukwuijster.eu/app/controllers/login.php on line 21
पश्व-अनुरेखन
Core\Controller->__construct() called at [/var/www/html/site.luukwuijster.eu/app/controllers/login.php:11] #1 Login->__construct() called at [/var/www/html/site.luukwuijster.eu/core/Router.php:26] #2 App->__construct() called at [/var/www/html/site.luukwuijster.eu/public/index.php:5]
आप देख सकते हैं, यह ठीक काम करता है जब मैं निर्माता कॉल करने के लिए मजबूर है, लेकिन जब मैंने इसे मजबूर नहीं है, यह केवल घर clas में काम करता है: विस्तारित वर्ग की रों। (होम नियंत्रक)
कोड:
होम नियंत्रक:
use App\User;
use Core\Controller;
use Core\DB;
class Home extends Controller
{
public function test()
{
return User::name();
}
}
लॉग इन नियंत्रक:
use App\User;
use Core\Controller;
use Core\DB;
class Login extends Controller
{
//This is the constructor I was talking about to force the calling of
//the constructor in the extended class.
public function __construct()
{
parent::__construct();
}
public function login()
{
return User::name();
}
}
विस्तारित वर्ग (नियंत्रक)
namespace Core;
class Controller
{
public $database;
function __construct()
{
//I have put this here to see the backtrace.
debug_print_backtrace();
$this->database = new DB();
foreach (glob('../app/models/*.php') as $model){
require_once $model;
}
}
Router.php मैं यहाँ में इस डाल दिया है क्योंकि यह यहाँ में नियम 26 पर बुलाया जाता है जब मैं विस्तारित वर्ग पर निर्माता के फोन करने के लिए मजबूर नहीं है। ($this->controller = new $this->controller;
)
class App
{
protected $controller = 'home';
protected $method = 'index';
protected $parameters = [];
protected $a = 0;
public function __construct()
{
$url = $this->Url();
if(file_exists('../app/controllers/'. $url[0] .'.php')){
$this->controller = $url[0];
unset($url[0]);
} else {
if (isset($url[0]))
die(view('error404'));
}
require_once '../app/controllers/'. $this->controller .'.php';
$this->controller = new $this->controller;
if (isset($url[1])){
if (method_exists($this->controller, $url[1])){
$this->method = $url[1];
unset($url[1]);
}else{
die(view('error404'));
}
}
$this->parameters = $url ? array_values($url) : [''];
echo call_user_func_array([$this->controller, $this->method], $this->parameters);
}
public function Url()
{
if(isset($_GET['url'])){
$url = filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL);
$exploded_url = explode('/', $url);
return $exploded_url;
}
}
}
मेरे सवालों का:
क्यों यह ठीक होम नियंत्रक में नहीं लॉग इन नियंत्रक में काम कर रहा है, और?
और मुझे लॉग इन कंट्रोलर में वैसे ही काम करने के लिए क्या करना है?
मुझे आशा है कि सब कुछ स्पष्ट है, और यदि आपको अधिक कोड या जानकारी चाहिए तो आप टिप्पणियों में मुझसे पूछ सकते हैं।
क्या आप लॉगिन :: लॉगिन() को स्थिर रूप से कॉल कर रहे हैं? –
हां, मैं हूं लेकिन मैं अपनी समस्या का मुद्दा नहीं –