PDA

View Full Version : مشکل صدا زدن کنترلر از داخل ویو و یغام خطای fatal error



farnoosh66
پنج شنبه 06 آذر 1399, 16:43 عصر
سلام دوستان
وقت بخیر
من تازگی از یه سری ویدیو اموزش php mvc دارم میبینم ، توی یه مرحله ای گیر کردم و دیگه نمیتونم جلو برم ممنون میشم رهنمایی کنید. خطای زیر رو دارم


( ! ) Fatal error: Class 'Controller' not found in C:\wamp\www\salah\controllers\register.php on line 4





از توی view با دستور form طبق زیر میخوام به کنترلر برم .
ویو:


<form action=" http://127.0.0.1/salah/controllers/register/checkUser" method="post" name="form">

کنترلر:

<?php
class register extends Controller
{

function __construct()
{

}


function index()
{
echo 'qqq';
}

function checkUser()
{

}
}


?>

اینم controller اصلی که توی core هست


<?php

class Controller
{

function __construct()
{
}

function view($viewurl,$data=[],$noIncludeHeader='',$noIncludeFooter='')
{
// echo $viewurl;
if ($noIncludeHeader=='') {
require('header.php');
}
require('views/' . $viewurl . '.php');
if ($noIncludeFooter==''){
require('footer.php');
}

}

function model($modelUrl)
{
require ('models/model_'.$modelUrl.'.php');
$classname='model_'.$modelUrl;
//این property اینجا ساختی جاهای دیگه ازش استفاده میکنی
$this->model=new $classname;
}
}

?>

plague
جمعه 07 آذر 1399, 16:34 عصر
خطی که اررور میده رو نزاشتی ولی مشخصا داره میگه کلاس Controller توی فایل register.php تعریف نشده
شما یا باید کلاست تو اون فایل تعریف شده باشه یا اینکه اگه تو فایل دیگری تعریف شده اون فایل دیگر رو اینکلود کنی توی فایلی که صداش میزنه

معمولا تو mvc یک فایل index.php وجود داره که درخواست ها به اون فرستاده میشه و اون کنترلر رو صدا میزنه و کنترلر هم ویو رو لود میکنه از اونجایی که این فایل ها همه توی یک درخواست لود میشن (حالا به شکل اینکلود کردن یا روش های مشابه ) این مشکلی که شما داری پیش نمیاد
و البته منطق mvc هم شما نباید اصلا از توی ویو بیای کنترلر رو فراخوانی کنی معنی نداره اینکار ... قبل از لود شدن ویو درخواست به کنترلر میره و اونجا هرکاری لازمه انجام میشه و بعد ویو فراخانی میشه
ویو فقط برای نمایش داده هاست و فراخوانی کنترلر و صدا زدن توابع نباید انجام بشه از توی ویو

farnoosh66
جمعه 07 آذر 1399, 23:49 عصر
سلام
ممنون از پاسختون
خطی که خطا میده همون فایل register که توی خطا هست ،



<?phpclass register extends Controller{ function __construct() { } function index() { echo 'qqq'; } function checkUser() { }} ?>

خط چهارم بالا رو توی پیغام خطا نوشته.

اینکه فرمودین باید include کنم مگه وقتی extends کردم از کلاس کنترلر اصلی کافی نیست ، با توجه به اینکه extends کردم من از کلاس register حتی میتونم به متد های کنترلر دسترسی داشته باشم و مشخصه extend کار میکنه ولی خوب نمیدونم کافیه یا نه .
در مورد بخش دوم راهنماییتون ، کاملا حق با شماست که از ویو نباید به کنترلر برم ، ولی خوب صفحه رجستر هست ، وقتی کاربر اطلاعات فردیشو میزنه که ثبت نام کنه توی سایت ، از ویو میخوام برم کنترلر که از کنترلر به مودل که توی دیتابیس ثبتش کنم ، منطق شما برام درسته ولی راه حل دیگه ای نمیتونم توی ذهنم تصور کنم

plague
شنبه 08 آذر 1399, 13:31 عصر
فایل php از محیط بیرونش خبر نداره و نمیدونه چه فایل هایی بیرون هستن
extend کردن کافی نیست باید اون به اون کلاسی که اکستند میشه هم دسترسی داشته باشه از طریق اینکلود یا روش های مشابه

از ویو رفتن به کنترلر اشکالی نداره شما میتونی یه درخواست با فرم post یا get بفرستی از ویو به کنترلر
چیزی که مشکل داره اینه که از توی ویو بیای توابع کنترلر رو فراخانی کنی
این 2 شاید مشابه به نظر بیان ولی کاملا متفاوت هستن