Laravel:Controller如何从Route访问参数?

时间:2018-11-03 15:00:23

标签: php laravel

我显然是Laravel的菜鸟,希望有人能帮助我。

通过路线访问“关于”屏幕

 Route::get('/about', array('as' => 'about', function()
 {
    return View::make('about')->with('title','About Screen')->with('class','about');
 }));

变量{title和$ class可以通过{{$ title}}和{{$ class}}在about.blade.php中访问。如果相反,我之间有一个控制器,

 Route::get('hello/create', array('as' => 'create', 'uses' => 
 'HelloController@create', function()
 {
    return View::make('hello/create')->with('title','Create')->with('class','hello.create');
 }));

如何在HelloController.php代码中访问$ title和$ class(以便可以将值传播到即将到来的View)?

P.S。我确实知道/ hello / create / {变量名},几乎可以回答所有与此类似的问题,但是我不知道如何使用它来传输未键入Http请求的变量。

3 个答案:

答案 0 :(得分:1)

$title$class是您手动提供给刀片的值。这些不是您在路由的GET参数中接收的值。因此,您将执行与关闭操作相同的方法。

您的路线:

Route::get('hello/create', array('as' => 'create', 'uses' => 'HelloController@create'));

控制器方法:

class HelloController{
 public function create(){
  return View::make('hello/create')->with('title','Create')->with('class','hello.create');
 }
}

更新:

据我了解,您还可以在路由的闭包内调用控制器的方法,并将参数传递给控制器​​,并在控制器的方法内使用这些值调用视图。

您的路线文件:

use App\Http\Controllers\HelloController;

Route::get('hello/create',function(){
    $hello_obj = new HelloController();
    return $hello_obj->create('create','hello.create');
});

控制器方法:

class HelloController{
 public function create($title,$class){
  return View::make('hello/create')->with('title',$title)->with('class',$class);
 }
}

答案 1 :(得分:1)

首先,您需要清除流程。您-目前-手动将变量设置为返回到视图,因此您的路线应如下所示:

Route::get('hello/create', 'HelloController@create');

然后,您的控制器处理逻辑:

public function create(Request $request)
{
    return view('hello.create')->with('title','Create')->with('class','hello.create');
}

现在,如果您需要将参数从前端发送到控制器,则有两种选择:

  1. 定义route parameters
  2. 使用查询参数。

选项1

对于第一个选项,您需要在路由本身中定义所需/可选参数:

Route::get('hello/create/{a_variable}', 'HelloController@create');

然后您可以通过以下任何一种方式访问​​此参数:

public function create(Request $request)
{
    return view('hello.create')->with('a_variable', $request->a_variable);
}

或在方法中注入变量:

public function create(Request $request, $a_variable)
{
    return view('hello.create')->with('a_variable', $a_variable);
}

选项2

要使用查询参数,在发出请求时应包括此选项。如果您的路线如下所示:

Route::get('hello/create', 'HelloController@create');

您可以这样指定查询参数:

GET www.my-domain.com/hello/create?first_parameter=value_1&second_parameter=value_2

因此在您的控制器中,您可以按以下方式访问此值:

public function create(Request $request)
{
    $value_1 = $request->get('first_parameter');
    $value_2 = $request->get('second_parameter');

    return view('hello.create')
               ->with('value_1', $value_1)
               ->with('value_2', $value_2);
}

答案 2 :(得分:0)

您正在使用with()发送数据以进行查看。 使用在with()中设置的$ variablename在视图文件中回显示例:<?php echo $title; ?>