Неопределенное смещение: 1 в laravel 8

#php #laravel #laravel-8

#php #laravel #laravel-8

Вопрос:

В настоящее время я учусь выполнять вход и регистрацию в laravel8, ссылаясь на некоторые учебные пособия. Но после регистрации я получаю это сообщение Undefined offset: 1.

Строка ошибки, отображающая

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

Это мой файл маршрута (web.php )

 use IlluminateSupportFacadesRoute;
use AppHttpControllersUserController;


Route::get('/signup',[
    'uses' =>'AppHttpControllersUserController@getSignup',
    'as'=>'user.signup'
   
]);

Route::post('/signup',[
    'uses' =>'AppHttpControllersUserController@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');
 
     }
 
}
 

Пожалуйста, научите меня способу решения этой проблемы.Спасибо

Комментарии:

1. $matches , который является массивом (может быть? Вы не показываете, как вы его определяете), не имеет индекса 1 , так что вы не можете этого сделать $matches[1] . Есть ли что-то неясное в этом сообщении об ошибке?

2. Где вы использовали этот код trim($matches[1]); ?

3. Я не понимаю.никогда раньше не использовал что-то под названием {$matches} . Но это строка кода, отображаемая в laravel с неопределенным смещением: ошибка 1. Что-то не так в моем кодировании поющей страницы?

4. Это выглядит неправильно: Route::post('/signup', ['uses' => 'AppHttpControllersUserController@getSignup', ... , зачем POST использовать маршрут getSignup ? Должно ли это быть postSignup так ? Кроме того, $user-->save(); это синтаксическая ошибка. У вас есть 2 -- , должно быть $user->save();

5. @foreach($errors->all()as $error) является причиной этой ошибки; между () и нет пробела as , поэтому @foreach() директива завершается с ошибкой (как показано в ответе ниже). Это яркий пример того, почему отступы и интервалы так важны при написании кода. Пожалуйста, старайтесь быть последовательными и следовать соглашениям; пробелы до и после => для массивов, никаких пробелов -> для доступа к объектам и т. Д. И т. Д. Рассмотрите возможность использования IDE (VSCode, SublimeText и т. Д.), В которой есть подсветка linter / syntax, Чтобы избежать этих проблем.

Ответ №1:

Вы должны добавить пробел @foreach между частями:

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

Должно быть:

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

Блейд-компилятор анализирует выражение, переданное в эту директиву, и выполняет preg_match над ним a, чтобы получить фрагменты выражения, поскольку эта директива делает больше, чем просто создает foreach цикл. Вот совпадение по выражению:

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

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

Комментарии:

1. единственное место во всей базе кода, где $iteratee = trim($matches[1]); оно существует, находится в блейд-компиляторе @compileForelse и @compileForeach (которое исходит из CompilesLoops признака)

2. Исправлено @foreach, как вы сказали, но ошибка продолжает поступать. Что-то не так, как я использовал цикл в своем блейд-файле

3. @tuneKawaiiUwU Представление может быть кэшировано, попробуйте очистить его.