来自MySQL的Laravel动态路由

时间:2014-03-15 16:06:23

标签: dynamic laravel blade laravel-routing

我正在尝试从一个模板“tuning.blade.php”生成路线

我有一个250行的数据库我想用一个路由或一个控制器动态创建250个路由。

我希望能够使用这些网址

laravel.dev/tuning/(field from DB row 1)
laravel.dev/tuning/(field from DB row 2 and so on)

我想将数据库请求放在tuning.blade.php中,以便此模板可以使用250个不同的URL显示所有250行

我尝试使用Laravel Docs中的第一个示例

class UserController extends BaseController {

    /**
     * Show the profile for the given user.
     */
    public function showProfile($id)
    {
        $user = User::find($id);

        return View::make('user.profile', array('user' => $user));
    }

}


Route::get('user/{id}', 'UserController@showProfile');

我还从http://forumsarchive.laravel.io/viewtopic.php?id=9010获得了一些有趣的搜索结果 但是,我总是最终得到一个未发现的例外

但我不确定在我的调整模板中放置什么以显示任何内容。我的Tuning模板位于app / views / home / tuning.blade.php

目前我收到错误“Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException”

有人能把我放在正确的方向,我可以找到一个资源来帮助我理解吗?

1 个答案:

答案 0 :(得分:2)

您说您希望能够使用这些URL s:

laravel.dev/tuning/(field from DB row 1)
laravel.dev/tuning/(field from DB row 2 and so on)

您可以通过声明如下路线来完成此操作:

Route::any('/tuning/{field}', 'TuningController@someMethod'); you may get/post

您不应该从view运行SQL查询,如果您想真正为数据库中的每个字段声明一些动态路由,那么您可以直接从routes.php文件中执行id,例如,假设您有一个名为tunings的表,该表包含一些字段,包括idname和其他一些字段。现在,要使用表tuning的{​​{1}}字段动态地为每个路由声明路由,您可以在tunings中创建一个方法,如下所示:

TuningController

现在在class TuningController extends baseController { // other methods... public function registerTuningRoutes() { $tunings = Tuning::all(); // Assume that you have a model Tuning // Or you may use this instead $tunings = DB::table('tuning')->get(); // Now loop all tunings and declare routes foreach($tunings as $tuning) { $url = '/tuning/' . $tuning->name; $route_name = 'tuning.' . $tuning->name; Route::any($url, $route_name); // You may use get/post } } public function TuningMethod($tuning = null) { // $tuning will contain the current tuning name, check dd($tuning); } } 文件中使用以下内容:

routes.php

在终端/命令提示符下,通过运行以下命令检查路由:

Registers route for each tuning name in database
App::make('TuningController')->registerTuningRoutes();

但是,我认为,你不需要这样做,只有一条路线足够我在前面的回答中提到过。