php laravel控制器功能参数

jmp7cifd  于 2022-12-21  发布在  PHP
关注(0)|答案(2)|浏览(167)

我试图从action()辅助函数调用我的控制器中的一个函数。我需要传递一个参数给我的函数。
下面是我尝试调用的函数:

public function my_function($clef = 'title')
{   
    $songs = Song::orderBy($clef)->get();
    return View::make('my_view', compact('songs'));
}

我是这样称呼它的:

<a href="{{ action('MyController@My_View', ['clef' => 'author']) }}">Author</a>

函数总是以默认值运行,即使我在调用中加入了其他内容,从地址栏中可以看到,参数似乎是随调用沿着发送的:

http://www.example.com/my_view?clef=author

就我所知,它似乎是正确的,但既然它不起作用,我必须找到它不起作用的证据。用正确的参数调用函数的最简洁的方法是什么?

pftdvrlh

pftdvrlh1#

它不起作用的原因是查询字符串不是作为参数传递给控制器方法的,而是需要像这样从请求中获取它们:

public function my_function(Request $request)
{   
    $songs = Song::orderBy($request->query('clef'))->get();
    return View::make('my_view', compact('songs'));
}

额外花絮:因为Laravel使用魔术方法,所以实际上只需执行$request->clef就可以获取查询参数。

piztneat

piztneat2#

Laravel URL参数

我认为赋值参数不需要在键值对中。我让它在没有名字的情况下工作。
如果您的路由类似/post/{param},您可以如下所示传递参数。您的URL将替换为/post/100

URL::action('PostsController@show', ['100'])

对于多个参数,比如/post/{param1}/attachment/{param2}参数可以如下所示传递。同样,您的url将被替换为/post/100/attachment/10

URL::action('PostsController@show', ['100', '10'])

这里的***show***是***PostsController***中的一个方法

在邮件控制器中

public function show($param1 = false, $param2 = false)
{   
    $returnData = Post::where(['column1' => $param1, 'column2' => $param2 ])->get();
    return View::make('posts.show', compact('returnData'));
}

在视图中

<a href="{{ action('PostsController@show', ['100', '10']) }}">Read More</a>

在路线中

Route::get('/post/{param1}/attachment/{param2}', [ 'as' => 'show', 'uses' => 'PostsController@show' ] );

URL应为:http://www.example.com/post/100/attachment/10
希望这是有帮助的。

相关问题