【问题标题】:How to pass data from routes group to its controllers?如何将数据从路由组传递到其控制器?
【发布时间】:2020-10-18 21:14:16
【问题描述】:

我在 Laravel 中有一个路由组,它获取如下参数:

Route::group(['prefix' => '{ProjectCode}'], function () {
    Route::get('/categories', 'CategoriesController@Categories');
    Route::get('/add-category', 'CategoriesController@AddCategory');
});    

ProjectCode是一个id,用来从数据库中获取一些数据 我想将检索到的数据传递给它们位于路由组子中的控制器,并避免在控制器的每个函数中获取数据

【问题讨论】:

  • 创建一个更容易的中间件。
  • 你试过Implicit或者Explicit路由绑定吗?这通常是在控制器之前拉模型的方式。
  • @LLai 谢谢,我会试试的,这样可以在多个组中使用它作为子吗?我的意思是在一个组中声明它并在其他子组中使用它
  • @shyammakwana.me 谢谢,但是我怎样才能获得返回的数据并将它们传递给组路由中的所有控制器?
  • 这我不是 100% 确定的。我通常直接在路由中而不是在组中使用路由绑定,但我猜它会起作用

标签: php laravel laravel-routing laravel-controller


【解决方案1】:

你可以使用“隐式/显式路由模型绑定”,假设你有Project模型,你可以有这个控制器方法(使用camelCase作为参数和控制器的方法名而不是PascalCase):

Route::group(['prefix' => '{projectCode}'], function () {
    Route::get('/categories', 'CategoriesController@pategories');
    Route::get('/add-category', 'CategoriesController@addCategory');
});  

class CategoriesController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @param  Request  $request
     * @return \Illuminate\Http\Response
     */
    public function categories(\App\Project $projectCode)
    {
        //
    }
}

您可能希望使用自己的分辨率绑定,覆盖模型上的resolveRouteBinding

/**
* Retrieve the model for a bound value.
 *
 * @param  mixed  $value
 * @param  string|null  $field
 * @return \Illuminate\Database\Eloquent\Model|null
 */
public function resolveRouteBinding($value, $field = null)
{
    return $this->where($field ?? $this->getRouteKeyName(), $value)->first();
}

请参阅Laravel docs 了解更多信息。

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 1970-01-01
    • 2017-12-04
    • 2014-04-02
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2021-01-28
    • 2019-07-10
    相关资源
    最近更新 更多