محمد میرزاخانی
3 سال پیش توسط محمد میرزاخانی مطرح شد
9 پاسخ

خطا د ر پیدا کردن متغیر

سلام دوستان من خطای زیر را میگیرم موقع نمایش view کلافم کرده

Undefined variable $lang

این view

@extends('layout')

@section('body')
{{ $lang }}
{{-- @php
if ($lang=="fa")
{
$url=route('updatelang');
$status='<a href="'.$url.'"><label class="badge badge-success">فارسی</label></a>';
}
else {
$url=route('updatelang');
$status='<a href="'.$url.'"> <label class="badge badge-warning"> English </label> </a>';
}
@endphp --}}

<hr>
{!!$status!!}
<hr>
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">{{ __('Dashboard') }}</div>

                <div class="card-body">
                    @if (session('status'))
                        <div class="alert alert-success" role="alert">
                            {{ session('status') }}
                        </div>
                    @endif

                    {{ __('You are logged in!') }}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

این روت

Route::get('/updatelang', [App\Http\Controllers\HomeController::class, 'updatelang'])->name('updatelang');

اینم کنترلر

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;

class HomeController extends Controller
{
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
     $this->middleware('auth');
    }

    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Contracts\Support\Renderable
     */
    public function index()
    {
        return view('home');

    }
    public function updatelang(){
        $lang=App::getlocale();
        if($lang=='en')
        {
            App::setlocale('fa');
            $lang=App::getlocale();
        }
        else
        {
            App::setlocale('en');
            $lang=App::getlocale();
        }

         return view('home',compact('lang'));
    }
}

ممنون میشم راهنمایی کنید🙏


ثبت پرسش جدید
احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش مطرح شد
0

با سلام اگه منظورتون رو خوب متوجه شده باشم شما میخواید کاربر هرموقع روی یه دکمه خاص زد زبان سایت عوض بشه و شما متغیری به نام lang (Language) دارید که زبان سایت رو مشخص میکنه و وقتی برای اولین بار اون صفحه (View) میخواد صدا زده بشه اصلا متغیری وجود نداره که بررسی بشه .... پیشنهاد من به شما اینکه حتما همیشه قبل از صدا زدن اون صفحه (View) بهش یک مقدار پیشفرض بدید و برای View ارسالش بکنید ، مثلا همیشه مقدارش رو fa قرار بدید.
فکر میکنیم تابع index برای صدا زدن صفحه home هستش ، بهتره بنویسید :

App::setlocale('fa');
return view('home',compact('lang'));

اگر بنده کد رو اشتباه نوشتم خودتون تصحیح بکنید چون منطق یک کاری مهمه نه فقط ارائه کد.
موفق باشید


Saman
تخصص : برنامه نویس وب
@samanzdev 3 سال پیش مطرح شد
0

سلام
مطمئن بشید که متغییر lang رو بدرستی پاس دادید؟ ( که به نظر میاد به درستی انجام شده)
این کامند رو وارد کنید.

php artisan view:clear 

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

سلام.
nر ابتدا فانکشن updatelang، دستور زیر رو قرار بدین تا مشخص بشه اصلا وارد این فانشکن میشه یا نه.

dd('OK');

محمد میرزاخانی
@mirzamohammad.com 3 سال پیش مطرح شد
0

@samanzdev
@rezajahangir
میدونید همونجور که احتمالا از کنترلر متوجه شدید من میخام دکمه ای واسه کاربر تولید کنم که با کلیک روی دکمه هی زبان سایتما تغییر بده اگه فارسی بود بشه انگلیسی و برعکس.اما در واقع خب اصن این تابع موقعی اجرا میشه که من روی دکمه بزنم و بعد وارد updatelang بشه و متغیرlang فرستاده بشه به ویو اما اشکال من اینجاست خب اون اول که میرم توی ویو اصن تابع updatelang اونموقع اجرا نشده که بخاد متغیر lang فرستاده بشه.اره خلاصه فک میکنم مشکلم اینه اما راهه حلی فعلا واسش ندارم.


Saman
تخصص : برنامه نویس وب
@samanzdev 3 سال پیش مطرح شد
0

می تونید با isset چک کنید.


محمد میرزاخانی
@mirzamohammad.com 3 سال پیش مطرح شد
0

@samanzdev
ممنون منظورتون اینه؟؟

 @php
 if (isset($lang))
{
if ($lang=="fa")
{
$url=route('updatelang');
$status='<a href="'.$url.'"><label class="badge badge-success">فارسی</label></a>';
}
else {
$url=route('updatelang');
$status='<a href="'.$url.'"> <label class="badge badge-warning"> English </label> </a>';
}
}
@endphp 
{!!$status!!}

خب اینجوری که وقتی $lang وجود نداره اصن دکمه ها را نشون نمیده واسه تغییر زبان.


Saman
تخصص : برنامه نویس وب
@samanzdev 3 سال پیش مطرح شد
0

می تونید از !isset استفاده کنید.


احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش مطرح شد
0

با سلام اگه منظورتون رو خوب متوجه شده باشم شما میخواید کاربر هرموقع روی یه دکمه خاص زد زبان سایت عوض بشه و شما متغیری به نام lang (Language) دارید که زبان سایت رو مشخص میکنه و وقتی برای اولین بار اون صفحه (View) میخواد صدا زده بشه اصلا متغیری وجود نداره که بررسی بشه .... پیشنهاد من به شما اینکه حتما همیشه قبل از صدا زدن اون صفحه (View) بهش یک مقدار پیشفرض بدید و برای View ارسالش بکنید ، مثلا همیشه مقدارش رو fa قرار بدید.
فکر میکنیم تابع index برای صدا زدن صفحه home هستش ، بهتره بنویسید :

App::setlocale('fa');
return view('home',compact('lang'));

اگر بنده کد رو اشتباه نوشتم خودتون تصحیح بکنید چون منطق یک کاری مهمه نه فقط ارائه کد.
موفق باشید


محمد میرزاخانی
@mirzamohammad.com 3 سال پیش مطرح شد
0

@ehsndvr
نه خیلیم عالی
ممنون سلامت باشید


احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش مطرح شد
0

@mirzamohammad.com سلام
خداروشکر که مشکلتون حل شد.
همیشه موفق و پیروز باشید. 🌹


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام