سلام،
استاد من پروژه دوره رو تازه شروع کردم بعد هی ارور میده خیلیاشو درست میکنم ولی بعضیا مثل اینو نمیتونم
اولای پروژه که میخوایم وارد روت ادمین بشیم و همچین کدی در صفحه ادمین قرار دادیم
\System\Auth\Auth::user()->first_name
و هنوز یوزری نساختیم و قبل از اینکه با متد loginbyid بخوایم وارد بشیم
وقتی میرم داخل روت ادمین توسط کد بالا (متد Auth)باید ریدایرکت بشم به صفحه login ولی با خطای زیر روبرو میشم
Warning: Cannot modify header information - headers already sent by
(output started at E:\xampp\htdocs\mvc\system\helpers\helpers.php(10) : eval()'d code:1) in
E:\xampp\htdocs\mvc\system\helpers\helpers.php
on line 75
ob_start() رو در بوت استرپ فایل app قرار دادم که درست شد ولی میدونم که کار درستی نیست و شما هم اینو قرار ندادید
الان ایرادش کجاست استاد عزیزکه برای شما درست کار میکنه و میبره به لاگین ولی برای من این خطا رو میده؟
در ضمن استاد لاین 75 هم این هستش
function redirect($url){
$url = trim($url,'/ ');
$url = strpos($url, currentDomain()) === 0 ? $url : currentDomain() . '/' . $url;
header("Location: ".$url);
exit;
}
و متد Auth هم به این هلپر ریدایرکت میکنه
با سلام خدمت شما همراه عزیز
بهتره توی پروژه تغییر ایجاد نکنید
متن خطارو سرچکنید و راه حلی که ارائه داده طی کنید حل میشه
اینمشکل رو هم یادمه یکی از عزیزان پرسیده بودن در سوالات
استاد سرچ کردم به نتیجه نرسیدم داخل پرسش و پاسخ هم همه رو دیدم و بازم نشد
قبل از ریدایرکت در متد Auth لیست هدرها رو گرفتم
array(5){[0]=>string(23)"X-Powered-By: PHP/8.0.0" [1]=> string(38) "Expires: Thu, 19 Nov 1981 08:52:00 GMT" [2]=> string(50) "Cache-Control: no-store, no-cache, must-revalidate" [3]=> string(16) "Pragma: no-cache" [4]=> string(38) "Content-type: text/html; charset=UTF-8" }
فکر میکنم اون eval که در متد view هست هدر ارسال میکنه و دیگه کد هدر درون php اجرا نمیشه
این ویوی منه در هلپرها
function view($dir, $vars = []){
$viewBuilder = new \System\View\ViewBuilder();
$viewBuilder->run($dir);
$viewVars = $viewBuilder->globalVars;
$content = $viewBuilder->content;
empty($viewVars) ? : extract($viewVars);
empty($vars) ? : extract($vars);
eval(" ?>".html_entity_decode($content));
}
این متد ریدایرکت منه در هلپرها
function redirect($url){
$url = trim($url,'/ ');
$url = strpos($url, currentDomain()) === 0 ? $url : currentDomain() . '/' . $url;
header("Location: ".$url);
exit;
}
اینم کد داخل متد Auth هست که باید اجرا بشه ولی هدر قبلا ارسال شده
if(!$session->get('user')){
return redirect($this->redirectTo);
}
استاد عزیز راه حلش چیه؟
Cannot modify header information - headers already sent by
اینوبایدسرچ
کنید
استاد منم همینو سرچ کردم و بازم سرچ کردم
eval(" ?>".html_entity_decode($content));
ارور پایین میگه در کدی که در خط بالا قرارش دادم هدر ارسال میشه ، دقیقا مثل شما نوشتم و چندین بار هم چک کردم و هیچ اشتباه نوشتاری هم نداره ولی نمیدونم چرا میگه اون خط هدر ارسال میکنه ، کل امروز تقریبا رو این بودم ولی بازم نتونستم بفهمم ایرادش کجاست ، دقیقا مثل شما نوشتم و فقط میدونم که ایراد از خط کد بالاست
Warning: Cannot modify header information - headers already sent by
(output started at E:\xampp\htdocs\mvc\system\helpers\helpers.php(10) : eval()'d code:1) in
E:\xampp\htdocs\mvc\system\helpers\helpers.php
on line 75
ورژن php رومثل بنده کنید
منخودم چون این ارورو ندارم نمیتونم بگم چجوری باید حلش کنید فقط میتونم بگمسرچکنید
چون با راه حل های مختلف حل میشه و باید همرو تست کنید
استاد ورژن php من 8 هستش ؟ خب به فرض کمترش کنم و کار کنه ، پس این یعنی فریمورکی که نوشتیم فقط برای ورژن زیر 8 کار میکنه؟
اول پروژه ورژن php مورد نیاز رو گفتیم خدمتتون که ۷.۲ هست فکر کنم
این فریمورکقبل از معرفی ورژن ۸ ساخته شده
به دوره بروز رسانی اضافه میشه و سازگار ۸ هم میشه
دوسه تا تغییر ریز نیاز هست
استاد عزیز میتونید این دو سه تا تغییر ریز رو توی یه ویدئو در همین دوره قرار بدید که نمونه برای بروزرسانی ؟
بنظرم خیلی واجبه ، خیلی ممنون لطف میکنید موفق باشید
دیگه برم ببینم خودم چکار میکنم
دقیقا همینکارو میکنیم
دورهکه تموم بشه یک ویدیو اماده میکنیم و خدمتتون میگیم کامل
چشم
موفق باشید قطعا میتونید درستش کنید🌹
راستی یه چیزی استاد عزیز ،
این ریدایرکت با متد Auth از داخل کنترولر عمل میکنه و فقط وقتی بین کدهای html هستش عمل نمیکنه
اینم گفتم بگم شاید چیزی به ذهنتون رسید
متوجه نشدم
اینجا ریدایرکت میکنه خط پنجم در صورتی که ادمین نباشه یا آیدی بیخود وارد میکنم
class AdminController extends Controller{
public function __construct(){
Auth::loginById(5);
Auth::check();
if(Auth::user()->user_type != 'admin'){
redirect('/login');
exit;
}
}
public function index(){
return view("admin.index");
}
}
ولی وقتی داخل کد اچتیمل مینویسم عمل نمیکنه
ولی وقتی مثل خط پایین داخل کد اچتیمل قرار میگیره عمل نمیکنه
این کد داخل صفحه ادمین هست که در صورت لاگین نبودن ریدایکت میکنه به صفحه لاگین
<span class="user-name text-bold-600"><?= \System\Auth\Auth::user()->first_name .' '. \System\Auth\Auth::user()->last_name; ?></span>
ولی میگه هدر قبلا ارسال شده در این خط
eval(" ?>".html_entity_decode($content));
و بازم ممنون استاد عزیز بخاطر ویدیوی آخر دوره ،
در ضمن استاد باور کنید من آدمی نیستم که هی سوال بپرسم و خیلی ارورها رو خودم حل کردم ولی خب ...
چشم این مورد همبررسی میکنیم
سلامت باشید
بله میدونم این مشکل بخاطر ورژن هست بزودی حل میکنیم ایشالا
استاد واقعا عذر میخوام خیلی مزاحم شدم،
پس لطف کنید یه راهنمایی کنید
این دوره حدودا کی تموم میشه که من به یه سری دیگه از کارام برسم و بعد بیام دوباره وقتی توی اون ویدیو این مشکلات حل شدن دوباره شروع کنم
چون فایده نداره اصلا ریدایرکتش کار نمیکنه
یا ob_start() رو بزارم داخل bootstrap/app و پیش برم تا برسم به اون ویدئوی آخر دوره ؟
که این کارم شما فرمودی نکنم
خیلی ممنون استاد عزیز و واقعا سپاسگزارم برای این پاسخگویی ، موفق باشی
حدودا ۵ ساعت از دوره باقی مونده
خب ورژن php روبیارید پایین و ادامه بدید
استاد آخرش که باید ببریم بالا
حالا تا اون 5 ساعت تموم شه یه سری آموزشای دیگه رو میبینم
موفق باشی استاد عزیز
بسیار هم عالی
همچنین🌺
سلام استاد سوال آخره
<?php
if(!isset($_SESSION['user'])){
redirect('login');
}
?>
<!doctype html>
به این صورت که دستی مینویسم عمل میکنه ، این کد رو بالای صفحه مینویسم و کد پروژه وسط صفحست ، خط پایین
<span class="user-name text-bold-600"><?= \System\Auth\Auth::user()->first_name
کد php معمولی رو هم که وسط صفحه مینویسم ، مثل خط بالا ارور ارسال هدر میده
کلا نمیفهمم خب طبیعیه که وقتی وسط صفحه بعد کلی کد میخوایم هدر ارسال کنیم ارور بده ولی نمیدونم چرا برای شما این ارور رو نمیده
جدن استاد عزیز خیلی برای آموزش برنامه نویسی وقت گذاشتم و الان دور آخرم و دیگه طاقتم بریده ، یعنی پس صد در صد مشکل از ورژن php هست و اطمینان داشته باشم که آخر دوره برطرف میشه؟
خیلی ممنون استاد عزیز
سلام استاد یه کار دیگه کردم ، لاگین بودن و ادمین بودن رو بالای صفحه چک کردم که اگه ترو نبود قبل از ارسال محتوا به مرورگر بتونه هدر کنه به صفحه لاگین (بازم متوجه نشدم چطوری وسط صفحه و بعد از ارسال محتوا به مرورگر برای شما هدر میکنه) ، و ریختمش توی متغیر یوزر که اگر لاگین بود بتونم ازش استفاده کنم و همشونم به این صورت @include و این موارد درست کردم
دارم استاد طوری میکنم که دیگه مثل لاراول هیچ تگ phpای داخل صفحه باز نکنم
راه درستش اینه که همه رو مثل همین @include و ... که انجام دادید و با preg_match بررسی کردید منم یه تریت به پوشه view در سیستم اضافه کنم و همون کارا رو انجام بدم؟
البته تا الان کلی اضافه کردم و واقعا جالبه برام
استاد اگر میشه @csrf رو آموزش بدید خیلی عالی میشه ، البته اینم نوشتم ولی برگشتشو هنوز فکر نکردم کجا بررسیش کنم ، باید توی سشن پروایدر بررسی بشه؟
دمت گرم استاد واقعا آموزشت عالیه خیلی دوست دارم، موفق باشی
با سلام خدمت شما همراه عزیز
بله مناسب هست فقط وقتی زیاد پروژه رو تغییر بدید با توجه به ساختار پروژه من دیگه کمکی ازم برنمیاد چون پیچیده میشه و فقط خودتون میتونید تغییر ایجاد کنید تووش
چشم حتما در بروز رسانی اضافه میکنیم
سلامت باشید ممنون از محبت شما