Milad Rahimi
Milad Rahimi

Reputation: 3834

Shared data for GET and POST methods of one route in Laravel 5

My projects POST routes usually makes the same view on its GET version routes.

So POST route (controller) must pass the same data to the same view.

Is there any way to tell Laravel in POST route add some data to the same data which GET route passes?

I think it's me that is on the wrong way and there must be a better way.

For example see the following common data that both GET and POST methods pass to the view. In this example there is no much data but usually there are.

/**
 * @Route('/cp/users')
 *
 * @return \Response
 */
public function getUsers() {
    $users = User::all();
    $roles = ["admin", "personnel"];
    return view('cp.users', ['users' => $users, 'roles' => $roles]);
}

/**
 * @Route('/cp/users') POST
 * @param \Illuminate\Http\Request $request
 *
 * @return \Illuminate\Support\MessageBag
 */
public function postUsers(Request $request) {
    $users = User::all();
    $roles = ["admin", "personnel"];
    $rules = [
        'name'     => 'required',
        'surname'  => 'required',
        'email'    => 'required|email|unique:users',
        'password' => 'required|min:6',
        'role'     => 'required|in:admin,personnel'
    ];
    $validator = Validator::make((array)$request, $rules);
    if ($validator->fails()) {
        return view('cp.users', ['errors' => $validator->errors(), 'users' => $users, 'roles' => $roles]);
    }
    return view('cp.users', ['users' => $users, 'roles' => $roles]);
}

I do it this way:

/**
 * @Route('/cp/users') POST
 * @param \Illuminate\Http\Request $request
 *
 * @return \Illuminate\Support\MessageBag
 */
public function postUsers(Request $request) {
    $rules = [
        'name'     => 'required',
        'surname'  => 'required',
        'email'    => 'required|email|unique:users',
        'password' => 'required|min:6',
        'role'     => 'required|in:admin,personnel'
    ];
    $validator = Validator::make((array)$request, $rules);
    if ($validator->fails()) {
        View::share('errors', $validator->errors());
    }
    return $this->getUsers();
}

Upvotes: 1

Views: 1423

Answers (1)

Imtiaz Pabel
Imtiaz Pabel

Reputation: 5443

I think you are using route controller for that you getUsers for get and postUsers for post.If i am right then you need to use any prefix in function name that will get for both get and post method.Like that

public function anyUsers() {
$users = User::all();
$roles = ["admin", "personnel"];
return view('cp.users', ['users' => $users, 'roles' => $roles]);
}

this function will work both get and method using any prefix

Upvotes: 0

Related Questions