接收参数2应该是Laravel中的数组

时间:2019-07-15 18:18:35

标签: php laravel

我两天前用头撞墙,似乎无法摆脱这个错误。

我收到此错误:

ErrorException (E_WARNING)
array_map(): Argument #2 should be an array

我要做什么:每个用户可以在数据库中有一个URL列表。相同的URL可以在两个或多个用户帐户中,因此它是多对多关系。

我的 UrlsController 看起来像这样:

<?php

 namespace App\Http\Controllers;

    use App\User;
   use App\Urls;
    use Illuminate\Http\Request;
     use Auth;

 class UrlsController extends Controller
  {

public function __construct() {
    $this->middleware('auth');
}

public function index(User $user)
{
    return view('editurl', compact('user'));
}

public function store(User $user) {

    $user_id = Auth::user()->id;

    $data = request()->validate([
        'user_id' => $user_id,
        'url' => 'required',
    ]);

    auth()->user()->userurls()->create([
        'user_id' => $data['user_id'],
        'url' => $data['url'],
    ]);

    return redirect("/url/" . auth()->user()->id);

}

}

我的网址模型如下:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Urls extends Model
{
    //protected $quarded = [];
    protected $fillable = ['user_id','url'];

    protected $table = 'userUrls';

    public function user()
    {
        return $this->belongsToMany(User::class);
    }

}

我的刀片文件如下所示:

    @extends('layouts.pagprincipala')

@section('content')


<section id="home" class="home pt-5 pb-5">

    <div class="container mb-5">
        <div class="row">
            <div class="col-md-8">
                <h1 class="h4">Adaugare url-uri</h1>
                <hr class="bg-dark w-25 ml-0">
                <p>
                    <form action="/url/{{$user->id}}" enctype="multipart/form-data" method="post">
                    @csrf

                        <div class="row">
                            <div class="col-8 offset-2">

                                <div class="form-group row">

                                    <label for="url" class="col-md-12 col-form-label">Adaugare URL (doar emag si pcgarage)</label>
                                    <input id="url"
                                    type="text" 
                                    class="form-control{{$errors->has('url') ? 'is-invalid' : ''}}" 
                                    name="url" 
                                    autocomplete="url" autofocus>

                                    @if($errors->has('url'))
                                        <span class="invalid-feedback" role="alert">
                                            <strong class="text-danger">Campul url este obligatoriu.</strong>
                                        </span>
                                    @endif

                                </div>

                                <div class="row pt-4">

                                    <button class="btn btn-primary">Adaugare URL</button>

                                </div>

                            </div>
                        </div>

                    </form>
                </p>
            </div>
        </div>
    </div>

  </section>


@endsection

此外,我的路线如下所示:

Route::get('/url/{user}', 'UrlsController@index')->name('editurl');
Route::post('/url/{user}', 'UrlsController@store')->name('updateurl');

您能给我一个建议,以便如何向前发展吗?!

1 个答案:

答案 0 :(得分:0)

问题出在您的验证器中

$data = request()->validate([
        'user_id' => $user_id,
        'url' => 'required',
    ]);

您尝试使用用户规则来验证user_id。您可能想要实现的目标是'user_id' => 'integer',,也可以将这个规则放在一起,因为您知道用户是Auth()->user()的源头。应该这样做:

$data = request()->validate([
        'url' => 'required|url', //checks if it is an URL
    ]);

我们不知道您的User模型是如何构建的。在多对多的情况下,您需要具有urls_usersuser_urls_users的数据透视表url_iduser_id,这意味着{{ 1}}表,仅包含id和url。但这是另一个问题。如果要确保任何用户只有一个网址,则可以使用the ->sync() methode