Laravel Route模型绑定:检查模型

时间:2017-02-17 00:53:07

标签: php laravel laravel-5 routes

我有这条路线:

Route::get('{country}/{federalstate?}/{city?}', ['as' => 'regions.show', 'uses' => 'RegionsController@show']);

接下来,我有一个国家/地区,其中包含几个国家/地区。

我希望此路线仅在模型国家/地区存在{country}时生效。我想这样做,因为不要为该路线使用前缀。

丑陋的方式将是一个正则表达式。很丑,因为每次我向模型添加一个新国家时我都必须更新它。

那么完成我想要做的最好的方法是什么?

也许这可以提供帮助 - > https://laravel.com/docs/5.4/routing#route-model-binding - 但我是初学者,我无法让它发挥作用。

编辑:

这可能有效:

Route::get('{country?}/{federalstate?}/{city?}', ['as' => 'regions.show', 'uses' => 'RegionsController@show'])->where([
    'country' => 'germany|usa|canada'
]);

但是,正如我所说,每次向数据库添加新国家时,我都必须更改正则表达式。

3 个答案:

答案 0 :(得分:2)

这是我现在的解决方案:

在boot()方法的AppServiceProvider中:

$record = webform_submission_render($node, $submission, NULL, 'html');
$html = $html . drupal_render($record);

并在我的路线文件中:

$available_countries = Country::select('slug')->get();

$available_countries = $available_countries->toArray();

$tmp = array();

foreach ($available_countries as $country)
{
    $tmp[] = $country['slug'];
}

Config::set('app.available_countries', $tmp);

答案 1 :(得分:0)

正如您所建议的,路线模型绑定可能是您最好的选择。您可以从文档中看到,如果您绑定到您的路线的模型不存在,路线将返回404。

请注意,Route-Model绑定中的默认功能需要URL中的ID。如果要覆盖它,可以执行以下操作:

/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'name';
}

答案 2 :(得分:0)

在我看来,你可以将Country作为模型传递给你的控制器。如果您的数据库中没有这样的模型,Laravel将产生404错误。

相关问题