array to string conversion laravel

- 1 ماه پیش
توسط محمود خسروی آپدیت شد
محمود خسروی ( 2819 تجربه )
1 ماه پیش

به کد ههای من توجه کنید

web.php

Route::get('/code', 'HomeController@code')->name('code');
Route::post('/send', 'HomeController@send')->name('send');

HomeController.php

<?php

namespace App\Http\Controllers;

use App\Blog;
use App\Faq;
use App\SendSMS;
use App\Service;
use App\Slideshow;
use App\User;
use Illuminate\Http\Request;

class HomeController extends Controller
{
    /**
     * Show the application dashboard.
     *
     * @return void
     */
    public function index()
    {
        $slideshows = Slideshow::latest()->get();
        $services = Service::latest()->get();
        $faqs = Faq::latest()->get();
        $blogs = Blog::latest()->get();
        return view('Home.index', compact('slideshows', 'services', 'faqs', 'blogs'));
    }

    public function machines()
    {
        return view('Home.machines');
    }

    public function networks()
    {
        return view('Home.networks');
    }

    public function computers()
    {
        return view('Home.computers');
    }

    public function internets()
    {
        return view('Home.internets');
    }

    public function code()
    {
        return view('Home.send');
    }

    public function send(Request $request, $mobile = '09389267856')
    {
        if($request->ajax()) {
            $request->validate([
                'mobile_number' => 'required',
            ]);
            $sendSms = new SendSMS;
            $sendSms->mobile_number = $request->mobile_number;
            $sendSms->code = rand(10000,99999);
            if ($sendSms->save()) {
                try {
                    $api = new \Kavenegar\KavenegarApi("Example Api");
                    $sender = "10004346";
                    $message = " $sendSms->code ";
                    $receptor = $mobile;
                    $result = $api->Send($sender, $receptor, $message);
                    if ($result) {
                        foreach ($result as $r) {
                            echo "messageid = $r->messageid";
                            echo "message = $r->message";
                            echo "status = $r->status";
                            echo "statustext = $r->statustext";
                            echo "sender = $r->sender";
                            echo "receptor = $r->receptor";
                            echo "date = $r->date";
                            echo "cost = $r->cost";
                        }
                    }
                } catch (\Kavenegar\Exceptions\ApiException $e) {
                    echo $e->errorMessage();
                } catch (\Kavenegar\Exceptions\HttpException $e) {
                    echo $e->errorMessage();
                }
            }
            return response()->json(['data' => $request->mobile_number, 'id' => $sendSms->id]);
        }
    }
}

send.blade.php

@extends('Home.master')

@section('content')

    <div id="networks" class="pt-5 pb-5 mt-5">
        <div class="container">
            <div class="row">
                <div class="col-md-4 m-auto">
                    <div class="card mt-3">
                        <div class="card-header">
                            <h4>ثبت نام</h4>
                        </div>
                        <div class="card-body">
                            <form id="FormSend">
                                <div class="form-group" id="form-group-1">
                                    <label for="mobile_number">شماره تلفن</label>
                                    <input type="text" class="form-control" name="mobile_number" id="mobile_number">
                                </div>
                                <div class="form-group" id="form-group-2">
                                    <label for="code">کد</label>
                                    <input type="text" class="form-control" name="code" id="code">
                                </div>
                                <div class="form-group">
                                    <button type="submit" class="btn btn-danger" id="btn-ok">تایید</button>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

@section('script')
    <script>

        $(document).ready(function(){
            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                }
            });

            $("#btn-ok").click(function () {
                $("#form-group-1").hide();
                $("#form-group-2").fadeIn();
            });

            $('form').submit(function (event) {
                event.preventDefault();
                mobile_number = $('#mobile_number').val();
                $.post("{{ route('send') }}", {mobile_number:mobile_number}, function (data) {
                    $('#mobile_number').val('');
                    console.log(data);
                });
            });
        });
    </script>
@endsection

وقتی که من بعد از ذخیره کردن شماره تلفن همراه، این خطا را می بینم.

توضیح تصویر

بهترین پاسخ انتخاب شده توسط محمود خسروی
Alimotreb
1 ماه پیش

سلام
@oxbir

$this->validate($request, [
            'mobile_number' => 'required',
        ]);
        $mobile_data = [
            'mobile_number' => $request->input('mobile_number'),
        ];

        $Send_new = SendSMS::create($mobile_data);

یه مثال ساده به این شکل
مدل مربوطه رو فراخونی کنید
نیم اسپیسشم وارد شه
متد create رو صدا بزنید
و هر تعداد متغیر دارید بریزید داخلش

Alimotreb ( 92492 تجربه )
1 ماه پیش

سلام
@oxbir

مواردی که میخوایید توی دیتابیس ذخیره کنید رو بریزید توی یه آرایه و بعد از متد create استفاده کنید
این مورد رو تست بگیرید

وقتی هم ارسال میکنید یه dd() بگیرید از request
ببینید چیزی بر میگردونه
متغیر هایی که با ajax فرستادید رو اون طرف داریدشون یا خیر

محمود خسروی ( 2819 تجربه )
1 ماه پیش

سلام
@Alimotreb

من کد کامل را فرستادم و متد create را ندارم.

میشه بگی چطوری توی یه آرایه و بعد از متد create استفاده کنم

Alimotreb ( 92492 تجربه )
1 ماه پیش

سلام
@oxbir

$this->validate($request, [
            'mobile_number' => 'required',
        ]);
        $mobile_data = [
            'mobile_number' => $request->input('mobile_number'),
        ];

        $Send_new = SendSMS::create($mobile_data);

یه مثال ساده به این شکل
مدل مربوطه رو فراخونی کنید
نیم اسپیسشم وارد شه
متد create رو صدا بزنید
و هر تعداد متغیر دارید بریزید داخلش

محمود خسروی ( 2819 تجربه )
1 ماه پیش

به این شکل؟

public function send(Request $request, $mobile = 'Mobile Number')
{
    if($request->ajax()) {
        $this->validate($request, [
            'mobile_number' => 'required',
        ]);
        $mobile_data = [
            'mobile_number' => $request->input('mobile_number'),
            'code' => rand(10000,99999),
        ];
        if ($mobile_data->save()) {
            try {
                $api = new \Kavenegar\KavenegarApi("َApi Example");
                $sender = "10004346";
                $message = " $mobile_data->code ";
Alimotreb ( 92492 تجربه )
1 ماه پیش

سلام
@oxbir

بله ولی شما تو کد قبلیتون

$sendSms = new SendSMS;

یه شی ساختید
الان نیاز نیست شی بسازید

public function send(Request $request, $mobile = 'Mobile Number')
{
    if($request->ajax()) {
        $this->validate($request, [
            'mobile_number' => 'required',
        ]);
        $mobile_data = [
            'mobile_number' => $request->input('mobile_number'),
            'code' => rand(10000,99999),
        ];
$mobile_new = SendSMS::create($mobile_data);
        if ($mobile_new && $mobile_new instanceof SendSMS) {
        // if ($mobile_data->save()) {
            try {
                $api = new \Kavenegar\KavenegarApi("َApi Example");
                $sender = "10004346";
                $message = " $mobile_data->code ";

این مدل SendSMS رو هم حتما use شده باشه تو کنترلر

use App\Models\SendSMS;

البته اگر تو این مسیره!

محمود خسروی ( 2819 تجربه )
1 ماه پیش

اولش اشاره کرد به

Add \[mobile\_number\] to fillable property to allow mass assignment on \[AppSendSMS\]

بعدش رفتم مدل SendSMS، دستور زیر را اضافه کردم.

protected $fillable = ['mobile_number'];

بعدش خطای همین array to string conversion laravel را داد.

بعدش دستور dd() را نوشتم mobile_number را با شماره موبایل برام برگرداند.

public function send(Request $request, $mobile = 'Mobile Number')
{
    dd($request->all());

مشکل هنوز حل نشده است.

Alimotreb ( 92492 تجربه )
1 ماه پیش

سلام مجدد
@oxbir

شما شماره رو دریافت میکنید اوکی هست تا اینجا
ولیدیت هم میکنید
کوئری هم بزنید تو دیتابیس ذخیره کنید
به if رسیدید dd بگیرید ببینید مشکل از اونجا به بعد هست یا خیر

علی بیات ( 106602 تجربه )
1 ماه پیش

به نظرم .. در وارد کردن داده ها به دیتابیس مشکل دارید.

محمود خسروی ( 2819 تجربه )
1 ماه پیش

@ali.bayat

سلام خیر

محمود خسروی ( 2819 تجربه )
1 ماه پیش

@Alimotreb

سلام مجدد

به if رسیدم باز همون خطا را میدهد همین عکس خطای 500

Alimotreb ( 92492 تجربه )
1 ماه پیش

سلام
@oxbir
شما تا اینجای کد نباید مشکلی داشته باشید و کوئری باید ثبت بشه تو دیتابیس

$mobile_new = SendSMS::create($mobile_data);
        if ($mobile_new && $mobile_new instanceof SendSMS) {

بعد این if باید مشکل داشته باشید که اون باید ماژول همون SMS و اینا بررسی شه.

محمود خسروی ( 2819 تجربه )
1 ماه پیش

سلام مجدد

این را وارد کردم

        $mobile_new = SendSMS::create($mobile_data);
        if ($mobile_new && $mobile_new instanceof SendSMS) {
            dd('salam');

اما هیچ مقداری را برام برنگردون همین خطای 500 را نمایش داد

Alimotreb ( 92492 تجربه )
1 ماه پیش

سلام
@oxbir

کوئری ثبت شده یا نه؟
دیتا وارد دیتابیس شده یا نه

محمود خسروی ( 2819 تجربه )
1 ماه پیش

سلام مجدد

خیر

محمود خسروی ( 2819 تجربه )
1 ماه پیش

ممنون حالا درست شد

مشکل از مدل بود

protected $table = ['send_sms'];
برای ارسال پاسخ باید وارد سایت شوید