【发布时间】:2020-11-19 16:39:43
【问题描述】:
我目前正在学习通过参考一些教程在 laravel8 中登录和注册。但是注册后我得到了这个 Undefined offset: 1 消息。
显示的错误行是
$iteratee = trim($matches[1]);
这是我的路由文件(web.php)
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
Route::get('/signup',[
'uses' =>'App\Http\Controllers\UserController@getSignup',
'as'=>'user.signup'
]);
Route::post('/signup',[
'uses' =>'App\Http\Controllers\UserController@getSignup',
'as'=>'user.signup'
]);
这是注册页面注册部分
<header class="masthead" >
<div class="container">
<div class="masthead-subheading"></div>
<div class="masthead-heading text-uppercase"></div>
<div class="container">
<div class="card bg-light">
<article class="card-body mx-auto" style="max-width: 400px;">
<h4 class="card-title mt-3 text-center">Create Account</h4>
<p class="text-center">Get started with your free account</p>
@if(count($errors) > 0)
<div class="alert alert-danger">
@foreach($errors->all()as $error)
<p>{{$error}}</p>
@endforeach
</div>
@endif
<form action="{{ route('user.signup')}}">
<div class="form-group input-group">
<div class="input-group-prepend">
<span class="input-group-text"> <i class="fa fa-envelope"></i> </span>
</div>
<input name="email" class="form-control" placeholder="Email address" type="email">
</div>
<div class="form-group input-group">
<div class="input-group-prepend">
<span class="input-group-text"> <i class="fa fa-lock"></i> </span>
</div>
<input name="password" placeholder="Create password" type="password">
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-block"> Create Account </button>
{{csrf_field()}}
</div> <!-- form-group// -->
<p class="text-center">Have an account? <a href="login.html">Log In</a> </p>
</form>
</article>
</div> <!-- card.// -->
</div>
<!--container end.//-->
</header>
用户控制器
class UserController extends Controller
{
public function getSignup()
{
return view('user.signup');
}
public function postSignup(Request $request)
{
$this->validate($request,[
'email'=> 'email|required|unique:users',
'password'=>'required|min:4'
]);
$user= new User([
'email'=>$request-> input('email'),
'password'=> bcrypt($request-> input('password'))
]);
$user-->save();
return redirect()->route('shop.index');
}
}
请教我一个解决方法。谢谢
【问题讨论】:
-
$matches,这是一个数组(也许?你没有展示你如何定义它),没有索引1,所以你不能做$matches[1]。该错误消息有什么不清楚的地方吗? -
您在哪里使用此代码
trim($matches[1]);? -
我不明白。以前从未使用过名为 {$matches} 的东西。但它是 laravel 中显示的代码行,带有未定义的偏移量:1 错误。我的唱歌页面编码有问题吗?
-
这看起来不对:
Route::post('/signup', ['uses' => 'App\Http\Controllers\UserController@getSignup', ...,为什么POST路由会使用getSignup?应该是postSignup吗?此外,$user-->save();是语法错误。你有 2 个--,应该是$user->save(); -
@foreach($errors->all()as $error)是导致该错误的原因;()和as之间没有空格,所以@foreach()指令失败(如下面的答案所示)。这是为什么缩进和间距在编码时如此重要的一个典型例子。请尽量保持一致并遵守约定;=>前后的空格用于数组,->周围没有空格用于对象访问等。考虑使用具有 linter/syntax highlighter 的 IDE(VSCode、SublimeText 等)来避免这些边缘问题。