繁体   English   中英

将硬编码值从路径传递到控制器(Laravel)的正确方法?

[英]Proper way to pass a hard-coded value from route to controller (Laravel)?

我有一个带有一个动作的PagesControllerview 此操作接受page参数。

我想要实现的目标:

有一条路线example.com/aboutexample.com/foobar 当触发其中一个路由时,将routes路由文件中预定义的值传递给PagesController@view

在我的路线文件中:

Route::get('about', function () {
    return App::make('App\Http\Controllers\PagesController')->view('about');
})->name('aboutPage');

Route::get('foobar', function () {
    return App::make('App\Http\Controllers\PagesController')->view('foobar');
})->name('foobarPage');

它按预期工作,但我想知道是否有更好,更正确的方法来实现相同的功能?

将您的页面作为路由参数传递:

Route::get('{page}', 'PagesController@view');

//controller
public function view($page)
{
    //$page is your value passed by route;
    return view($page);
}

所以你只想要对你的行为进行论证。 如果该参数可以为空,则可以使用可选参数。 你可以在这里阅读更多相关信息。

Route::get('{argument?}', 'PagesController@view')->name('page');

在您的PagesController

public function view($argument = 'default') {
    // Your logic
}

如果您不需要示例中的路由名称

->name('foobarPage');

你可以使用这样的东西

Route::get('{page_name}','PagesController@view')->where('page_name', '(about)|(foobar)');

这将仅接受page_name参数的正则表达式中传递的值。 其他路线将引发404错误。 我应该提一下,这种技术似乎只适用于只有一级url嵌套的应用程序, 不应该用作模式。

从我上面所看到的,如果您所做的只是显示正确的视图我会去

Route::get('{page}', function($page)
{
    if (view()->exists($page)) { 
        return view($page);
    } 
    return abort(404);
});

这可以防止您甚至需要控制器中的方法。

根据你正在做的事情,你接受的答案是你想要的。

如果您真的想要一个硬编码值,您可以根据需要使用路径的“actions”数组部分。

Route::get('something', ['uses' => 'Controller@page', 'page' => 'something']);

public function page(Request $request)
{
    $page = $request->route()->getAction()['page'];
    ...
}

asklagbox - 博客 - 随机提示和技巧

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM