Laravel路由动态路由控制器到刀片模板

war*_*sky 1 routing controller laravel blade laravel-4

如何在我的刀片布局中显示控制器?

我有从MySQL导入的250个动态路由.它们使用以下控制器生成.

public function registerTuningRoutes()
{
   // $tunings = Tuning::all(); // Assume that you have a model Tuning

    // Or you may use this instead
    $tunings = DB::table('guitar_tunings_links')->get();

    // Now loop all tunings and declare routes
    foreach($tunings as $tuning)
    {
        $url = '/tuning/' . $tuning->tuning;
        $route_name = 'tuning.' . $tuning->tuning;
        Route::any($url, $route_name); // You may use get/post
    }
}

public function TuningMethod($tuning = null)
{
    // $tuning will contain the current tuning name, check
    $tuning_name = ($tuning);
    $tuning_name = strtoupper($tuning_name);
    $user = DB::table('guitar_tunings_links')->where('tuning', $tuning_name)->first();

    echo "<div class=\"panel panel-default\">
      <div class=\"panel-heading\">$user->name - $tuning_name</div>
      <div class=\"panel-body\">
        $user->description
      </div>
    </div>";

}
Run Code Online (Sandbox Code Playgroud)

这是我的路线......

Route::any('{field}', 'TuningController@TuningMethod');

App::make('TuningController')->registerTuningRoutes();
Run Code Online (Sandbox Code Playgroud)

这个控制器和路由器给我这样的URL laravel.dev/eadgbe,它也返回有关吉他调音的所有数据,但它不在我的模板系统中.没有使用任何样式或布局.

我在这里有一个刀片模板app/views/home/tuning.blade.php

我的控制器很棒.它从数据库中获取吉他调整的名称,并从中创建一个路径并从该行打印出所需的数据.

我的问题是我无法获得控制器的输出和路由成为tuning.blade.php模板的一部分.

我尝试添加以下路由

// Route 1
Route::get('tuning/{field}', function(){
    return View::make('home.tuning.{field}')
});

// Route 2
Route::get('tuning/{field}', function(){
    return View::make('home.{field}')
});
Run Code Online (Sandbox Code Playgroud)

我已经在Laravel文档部分阅读了很多关于路由控制器的内容,但我觉得我不理解它或者我错过了一些简单的东西.

另外,我发现这篇关于提前路由的文章http://daylerees.com/codebright/advanced-routing并试图理解并实现它无济于事.

任何人都可以帮我理解如何解决这个问题吗?

Ant*_*iro 5

您不必按照自己的方式注册所有路线,因为它们只能被解析为一条路线.据我所知,这个命令什么都不做:

Route::any($url, $route_name);
Run Code Online (Sandbox Code Playgroud)

因为它没有指向控制器,所以它只是指向一个名称tuning.something,这对Laravel路由器系统来说并不算什么.所以,实际上你的整个registerTuningRoutes功能都无所作为.但是你已经有了一条工作路线,它正在完成所有工作:

Route::any('{field}', 'TuningController@TuningMethod');
Run Code Online (Sandbox Code Playgroud)

话虽这么说,看起来你可以削减你的一些代码,并保持这条路线:

Route::any('{field}', 'TuningController@TuningMethod');
Run Code Online (Sandbox Code Playgroud)

您的控制器方法已经工作但必须更改才能直接呈现视图:

<?php

public function TuningMethod($tuning = null)
{
    // $tuning will contain the current tuning name, check
    $tuning_name = ($tuning);
    $tuning_name = strtoupper($tuning_name);
    $user = DB::table('guitar_tunings_links')->where('tuning', $tuning_name)->first();

    return View::make('home.tuning')->with('user', $user)->with('tuning_name', $tuning_name);
}
Run Code Online (Sandbox Code Playgroud)

app/views/home/tuning.blade.php文件可能是这样的:

@extends('layout')

@section('content')
    <div>
        You HTML here to beautifully render your page.

        This is your tunning details:
        <div class="panel panel-default">
            <div class="panel-heading">$user->name - $tuning_name</div>
            <div class="panel-body">
                $user->description
            </div>
        </div>
    </div>
@stop
Run Code Online (Sandbox Code Playgroud)

你应该有一个app/views/layout.blade.php文件,用HTML和body标签包装它:

<html>
<body>
    @yield('content')
</body>
</html>
Run Code Online (Sandbox Code Playgroud)