【问题标题】:Undefined offset: 1 in laravel 8未定义的偏移量:laravel 8 中的 1
【发布时间】: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' =&gt; 'App\Http\Controllers\UserController@getSignup', ...,为什么POST 路由会使用getSignup?应该是postSignup 吗?此外,$user--&gt;save(); 是语法错误。你有 2 个--,应该是$user-&gt;save();
  • @foreach($errors-&gt;all()as $error) 是导致该错误的原因; () 和 as 之间没有空格,所以 @foreach() 指令失败(如下面的答案所示)。这是为什么缩进和间距在编码时如此重要的一个典型例子。请尽量保持一致并遵守约定; =&gt; 前后的空格用于数组,-&gt; 周围没有空格用于对象访问等。考虑使用具有 linter/syntax highlighter 的 IDE(VSCode、SublimeText 等)来避免这些边缘问题。

标签: php laravel laravel-8


【解决方案1】:

您应该在@foreach 之间添加一个空格:

@foreach($errors->all()as $error)

应该是:

@foreach($errors->all() as $error)

Blade 编译器解析传递给该指令的表达式并对其执行preg_match 以获取表达式的各个部分,因为该指令不仅仅创建foreach 循环。这是表达式的匹配项:

preg_match('/\( *(.*) +as *(.*)\)$/is', $expression, $matches);

$iteratee = trim($matches[1]);

【讨论】:

  • 整个代码库中唯一存在$iteratee = trim($matches[1]); 的地方是刀片编译器@compileForelse 和@compileForeach(来自CompilesLoops 特征)
  • 如您所说更正了@foreach,但错误不断出现。我在刀片文件中使用循环的方式是否有问题
  • @tuneKawaiiUwU 视图可能被缓存,尝试清除它。
猜你喜欢
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 2022-01-02
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多