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

Posted

技术标签:

【中文标题】Laravel 路由动态路由控制器到刀片模板【英文标题】:Laravel route dynamic routes controller to blade template 【发布时间】:2014-04-21 14:40:57 【问题描述】:

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

我有 250 条从 mysql 导入的动态路由。它们是使用以下控制器生成的。

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>";


这是我的路线...

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

App::make('TuningController')->registerTuningRoutes();

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

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

我的控制器运行良好。它从 DB 中获取 Guitar Tuning 的名称,并从中创建一条路线,并从该行打印出所需的数据。

我的问题是我无法获得控制器的输出和成为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')
);

我已经在 Laravel 文档部分广泛阅读了有关路由控制器的内容,但我觉得我不理解它,或者我遗漏了一些简单的东西。

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

谁能帮助我了解如何解决这个问题?

【问题讨论】:

【参考方案1】:

您实际上不必按照自己的方式注册所有路线,因为它们可以被解析为只有一条路线。据我所知,这个命令什么也没做:

Route::any($url, $route_name);

因为它没有指向控制器,它只是指向一个名称tuning.something,这对 Laravel 路由器系统来说无关紧要。所以,事实上你的整个registerTuningRoutes 函数什么也没做。但是你已经有了一条工作路线,它正在为:

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

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

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

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

<?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);

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

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

<html>
<body>
    @yield('content')
</body>
</html>

【讨论】:

看准安东尼奥!非常感谢你。我是 Laravel 的新手,我很惊讶用这么少的代码就可以生成这么多!【参考方案2】:

我在代码的最后一部分(生成动态路由)中看到了您的尝试。我真的很高兴能在我身边测试它并尝试使用相同的路线,但它没有奏效。我进行了以下更改以使其正常工作。我希望这些变化会有所帮助。

附:如果我把你的问题弄错了,请原谅我。

// Routes.php
Route::get('testCall/testVariable', array(
    'as' => 'test', // This is the name of your route
   'uses' => 'Parekhchintan30\Test\TestController@testFunction'
 )); 
// TestController.php
public function testFunction($testVariable)
return View::make('test::'.$testVariable); // obviously you will need a view with that name
//test is the name of my package in this case

【讨论】:

以上是关于Laravel 路由动态路由控制器到刀片模板的主要内容,如果未能解决你的问题,请参考以下文章

在路由函数中读取刀片变量

在 laravel 刀片路由中使用 JavaScript 变量

如果仅存在,则在 laravel 刀片中调用路由

如何将 vue.js 值作为参数传递给刀片中的路由

在刀片视图中显示路线的结果(Laravel)

laravel 5.2 如何在刀片中获取路由参数?