我两天前用头撞墙,似乎无法摆脱这个错误。
我收到此错误:
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');
您能给我一个建议,以便如何向前发展吗?!
答案 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_users
和user_urls_users
的数据透视表url_id
或user_id
,这意味着{{ 1}}表,仅包含id和url。但这是另一个问题。如果要确保任何用户只有一个网址,则可以使用the ->sync()
methode。