skip to Main Content

I’m creating a user registration form. I create a form in the Component. when the user registers he redirects to the user page where he sees all users. when he wanted to edit or update something from in his details he redirects to the same registration form page but this will be a new URL and new Title. I’m getting an undefined variable $title and $url error. when I pass data from the controller to view I get this error.

Registration Form Controller

public function create(Request $request)
{
    $url = url('/register'); 
    $title = ("Registration Form");
    $data = compact( 'url');
    return view('RegistrationForm')->with($data);
}

public function store (Request $request)
{

    $request->validate(
        [
            'firstname' => 'required',
            'lastname' => 'required',
            'email' => 'required|email',
            'password' => 'required',
            'confirm_password' => 'required|same:password|min:8',
            'address' => 'required',
            'country' => 'required',
            'state' => 'required',
            'city' => 'required',
            'gender' => 'required',
            'tearms_and_conditions' => 'required',
        ],
        [
            'firstname.required' => 'Please enter your First Name',
            'lastname.required' => 'Please nter your Last Name',
            'email.required' => 'Please enter an Email',
            'password.required' => 'Please Enter a Password'
        ],
    );

    $users = new Users;
    $users->firstname = $request['firstname'];
    $users->lastname = $request['lastname'];
    $users->email = $request['email'];
    $users->password = md5($request['password']);
    $users->address = $request['address'];
    $users->country = $request['country'];
    $users->state = $request['state'];
    $users->city = $request['city'];
    $users->gender = $request['gender'];
    $users->date_of_birth = $request['date_of_birth'];
    $users->save();

    return redirect('/register/view');
}

public function view (Request $request)
{
    $users = Users::all();
    $data = compact('users');
    return view('user-view')->with($data);
}

public function delete($id)
{
    $user = Users::find($id);
    echo "<pre>";
    print_r ($user);
    die;
    return redirect('/register/view');
}

public function edit($id)
{
    $user = Users::find($id);
    if (is_null($user)) 
    {
        return redirect('/register/view');
    }
    else 
    {
        $url = url("user/update"."/". $id);
        $title = "Update Details";
        $data = compact('user', 'url', 'title');
        return redirect('/register')->with($data);
    }
}

public function update($id, Request $request)
{
    $user = Users::find($id);
    $users->firstname = $request['firstname'];
    $users->lastname = $request['lastname'];
    $users->email = $request['email'];
    $users->address = $request['address'];
    $users->country = $request['country'];
    $users->state = $request['state'];
    $users->city = $request['city'];
    $users->gender = $request['gender'];
    $users->date_of_birth = $request['date_of_birth'];
    $users->save();

    return redirect('register/view');
}

}

Route

Route::get('/register', [RegistrationFormController::class, 'index']);

View

<body>
<h1> {{$title}} </h1> 
<x-registration-form-component :country="$country" :url="$url" /> 

RegisreationFormComponent

2

Answers


  1. You have to pass the $data variable as the second argument of the view() method:

    public function index ()
    {
        $url = url('/register');
        $title = "Registration Form";
        $data = compact('title', 'url');
        return view('RegistrationForm', $data);
    }
    
    Login or Signup to reply.
  2. First, to answer your question:

    When you use the compact method, you are placing those values in an array. You would need to call them like so:

    {{ $data['title'] }}
    {{ $data['url'] }}
    

    However, you could clean the code up a little bit like this:

    public function index()
    {
      return view('RegistrationForm', [
        'url' => url('/register'),
        'title' => 'Registration Form',
      ]);
    }
    

    You can then use them in the blade file like so:

    {{ $url }}
    {{ $title }}
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search