Instrukcja PHP nie chcę działąć w szablonie blade (laravel)

0

Mam taki problem jak miałem taki ciąg instrukcji zapisany jako zwykły php nie szablob to wszystko działało natoamist jak zapisałem to jako szablon to jest kumunikat

Undefined variable: messages

Tutaj daje kod
Napoczatku było to zapisane tak

 <?php
$messages = $errors->all('<p style="color:red">:message</p>');


 foreach ($messages as $msg) {
 print $msg;
 }
 //endforeach
?>

Natomiast ten zapis jest kiedy wywala mi błąd.

 @$messages = $errors->all('<p style="color:red">:message</p>');


 @foreach ($messages as $msg) 
 {{!! $msg !!}}
 @endforeach
0

Spróbuj:

<?php $messages = $errors->all('<p style="color:red">:message</p>');?>
 
 @foreach ($messages as $msg) 
 {{ $msg }}
 @endforeach

W blade nie ma takich znaczników jak {{!! !!}} oraz @$messages.

0

Teraz działa tylko w tym przypadku do końca nie mam oddzielonej logiki od widoku nie wiem czy tak może zostać ?

0

Mając to w jednym pliku, czyli przypisanie zmiennej i wypisanie jej też nie masz oddzielonej logiki od widoku ;)

Przypisanie zmiennej powinieneś mieć w innym pliku ( controlerze ), i tą zmienną powinieneś przesłać do blade i wyświetlić.

0

Próbowałem wstawić to do kontrelera, ale mam błędy może mnie nakierujesz gdzie mam to wstawić.

         public function register2() {
        $klasa = new \App\Http\Controllers\klasa();
                          $rules = array(
    'email' => 'required|email|unique:users',
    'haslo' => 'required|same:haslo2',
    'name'=> 'required|unique:users'
      );
      
      $validation = Validator::make(Input::all(), $rules);
      
      if ($validation->fails())
      {
      
	return Redirect('rejestracja')->withErrors($validation)->withInput();
	
      }
      $user = new \App\User;
      $user->email = htmlspecialchars(Input::get('email'));
      $user->password = Hash::make(Input::get('haslo'));
      $user->name = htmlspecialchars(Input::get('name'));
      $user->date_registration = time();
      if ($user->save())
      {
	//Auth::loginUsingId($user->id);
	return Redirect('registration_succes');
      }	
        //Input::get('login');
	  //return View::make('/register');
	  //return View::make('register2');
	  //print "dobrze";
    //
    
    }
0

Spróbuj tak:

return view('nazwa widoku', ['nazwa_zmiennej_blade' => 'zmienna_z_kontrolera']); 
0

Zrobiłem tak, ale zwraca mi błąd

 return view('rejestracja2', $messages => $validation); 

Taki błąd.syntax error, unexpected '=>' (T_DOUBLE_ARROW)

0
 return view('rejestracja2', ['messages' => $validation]); 
0

Jest komunikat

Undefined variable: messages

0

Teraz mam komunikat

View [rejestracja2] not found.

0

Masz przecież odpowiedź w samym błędzie, nie znalazł widoku w folderze Views, może literówka?

0

Zauważyłem, że jak zamiast rejestracja2 dam register2 to tez zwraca błąd taki sam bo register2 jest prawidłowym widokiem, ale jak dam inny widok np. register to takiego błędu nie ma może by zamiast tego jakoś przesłać plik metodą Redirect ?

0

Jednak się pomyliłem nie miałem takiego widoku, teraz na poprawnym widoku zwraca mi błąd Array to string conversion pewnie chodzi o to, że próbuje użyć tej zmiennej jako stringa, a ona jest tablicą mogę się odwołać to poszczególnego elementu, tylko nie wiem do którego.

2

https://laravel.com/docs/5.4/validation

W skrócie musisz zwrócić $validator->errors()->all() żeby dostać błędy. Wszystko o walidacji masz tam w dokumentacji.

0

Imo poszukaj lepszych poradników i zobacz raz jeszcze jak działają templaty bo bardzo dziwne rzeczy robisz w swoim kodzie.

0

Znak @ który wpisałeś powoduje wyciszenie błędów. Dodatkowo nigdzie nie sprawdzasz czy w ogóle są jakieś $messages. Możliwe że w blade działa to inaczej (nie wiem, nie używałem), ale dla mnie przed foreach powinien być if:

 if(!empty($messages) {

    foreach($messages as $message){

        echo $message;
    
    }

}
0

Przypisz błedy do zmiennej i wyslij metoda compact
return view('vidok', compact('zmienna'));

1 użytkowników online, w tym zalogowanych: 0, gości: 1