Как управлять маршрутами в контроллерах - laravel - PullRequest
0 голосов
/ 09 ноября 2018

В моем приложении есть три маршрута, которые я хочу запустить в функции в моем контроллере. Теперь, когда функция вызывается, маршруты в функции также должны выполняться. Вот как я это кодировал. Маршруты, выполняемые в getData, вызывают соответствующие функции в одном контроллере.

PS: Возможно, это неправильный способ достичь этого.

Но как мне этого добиться?

Контроллер

public function getData(Request $request)
{
    $message = new Message( array(
            'title' => $request->get('title'),
            'description' => $request->get('description'),
            'branch_id' => Auth::user()->branch_id,
            'user_id' => Auth::user()->id
        ));
        $message->save();

     return redirect('getproducts');
     return redirect('getcustomer');
     return redirect('getshop');
}



 public function getProducts()
    { //do something
    }
public function getCustomer()
    {// do something
    }
public function getShop()
    { // do something
     }

Маршруты

Route::get('getproducts',Controller@getProducts);
Route::get('getCustomer',Controller@getCustomer);
Route::get('getshop',Controller@getShop);

1 Ответ

0 голосов
/ 09 ноября 2018

Если вы намереваетесь использовать $message = new Message( array( и остальные getData (кроме перенаправлений) на всех других get* методах / действиях в вашем классе Controller, то вы можете переместить блок кода $message = new Message( array( в private метод, подобный этому:

private function getDataHelper(Request $request)
{
    $message = new Message([
        'title' => $request->get('title'),
        'description' => $request->get('description'),
        'branch_id' => Auth::user()->branch_id,
        'user_id' => Auth::user()->id
    ]);

    return $message->save();
}

Затем вы просто переопределяете структуру ваших public get* методов:

public function getProducts(Request $request)
{
    return $this->getDataHelper($request);
}

public function getCustomer(Request $request)
{
    return $this->getDataHelper($request);
}

public function getShop(Request $request)
{
    return $this->getDataHelper($request);
}

Возможно, не самый эффективный способ, но он сделает свою работу. Возможно, вы захотите удалить return в public get* методах.


EDIT:

Или, если вы хотите выполнить условное перенаправление на основе параметров title или description из вашего запроса, вы можете сделать следующее, сохранив большую часть кода:

private function getDataHelper(Request $request)
{
    $message = new Message([
        'title' => $request->get('title'),
        'description' => $request->get('description'),
        'branch_id' => Auth::user()->branch_id,
        'user_id' => Auth::user()->id
    ]);

    $title = $request->get('title');
    $description = $request->get('description');

    if($title === 'products' || $description === 'products') {
        return redirect('getproducts');
    }

    if($title === 'customer' || $description === 'customer') {
        return redirect('getcustomer');
    }

    if($title === 'shop' || $description === 'shop') {
        return redirect('getshop');
    }

    // otherwise redirect home
    return redirect('/');
}

Обратите внимание, что я догадался, что условия для правильного перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...