laravel 5.5:如何在控制器中调用路由?

时间:2017-10-04 17:37:37

标签: php laravel laravel-5 eloquent laravel-5.5

在web.php中我有这条路线打开一个表格:

$this->namespace('Users')->prefix('users')->group(function (){
    $this->get('/create' , 'UserController@create');
});

此路线返回一系列国家/地区。我使用该数组通过表单中的ajax填充选择框。

Route::namespace('API')->prefix('api')->group(function () {
    $this->get('/get-country-list', 'LocationsController@index');
});

控制器:

  

应用\ HTTP \控制器\ API \ LocationsController

class LocationsController extends Controller
{
  public function index()
  {
      return DB::table('countries')->pluck("name","id")->all();
  }
  ...
  

应用\ HTTP \控制器\用户\ UserController中

class UserController extends Controller
{
    public function create()
    {
        return view('panel.users.home.create.show');
    }
    ...

如何在LocationsController@index功能中拨打create()?  什么是最好的方法?

2 个答案:

答案 0 :(得分:1)

您可以在行动中尝试return redirect(route('...'));而不是return view()

<强>更新

因为您只想获取国家/地区列表而不是重定向。所以进行小调整,将data manipulating functionaction function

分开
protected function getCountries() {
   return DB::table('countries')->pluck("name","id")->all();
}

function index(Request $request) {
  return $this->getCountries();
}

function create(Request $request) {
  $countries = $this->getCountries();
  return view('panel.users.home.create.show', compact('countries'));
}

答案 1 :(得分:0)

我认为你应该尝试不同的方法。你似乎要做的是重用这个繁琐的查询:

DB::table('countries')->pluck('name', 'id')->all();

那很好!但是,您的index()函数是一个控制器端点,它返回一个响应,并不适合在其他控制器端点中重用。当我处于类似情况时,我通常会做两件事之一,

1。将代码解压缩到受保护的方法,并在两个控制器端点方法中使用它

class UserController extends Controller
{
    public function index()
    {
        return $this->countryNames();
    }

    public function create()
    {
        // $countryNames = $this->countryNames():

        return view('panel.users.home.create.show');
    }

    public function countryNames()
    {
        return DB::table('countries')->pluck('name', 'id')->all();
    }
}

2。在模型上创建一个方法,在这种情况下,这将涉及使用模型而不是DB外观。

class UserController extends Controller
{
    public function index()
    {
        return Country::names();
    }

    public function create()
    {
        // $countryNames = Country::names();

        return view('panel.users.home.create.show');
    }
}