Laravel路由到相同视图的不同功能

时间:2015-04-13 15:15:02

标签: php mysql laravel

我正在尝试使用Chumper将MySQL数据库中的值返回到数据表中。我试图从2个表中获取值;但我有我认为是路由问题,因为我不知道如何将2个控制器功能包含在同一个视图中,即在我的搜索视图中,我想渲染2个函数的结果,如:更深入地了解我的内容我试图完成查看问题:Laravel Chumper Datatable getting data into one datatable from multiple MySQL tables

Route::get('search', array('as' => 'instance.search', 'uses' => 'CRUDController@instances'));
Route::get('search', array('as' => 'accid.search', 'uses' => 'CRUDController@account_ids'));

任何想法?

2 个答案:

答案 0 :(得分:1)

只有一条路线可以匹配系统请求的任何给定URL。我相信Laravel会做的是选择第二个(如第二个定义中的那个将覆盖第一个)。

你有一些选择。我能从你的问题中确切地说,你想要在该路线被击中时执行两种方法。这是间接可能的,请考虑:

Route::get('search', 'MyController@instances');

class MyController extends Controller
{
    public function instances()
    {
        $mydata = $this->account_ids();
        $myotherdata = $this->getOtherData();

        return View::make('myview')
            ->with('mydata', $mydata)
            ->with('myotherdata', $myotherdata);
    }

    private function getOtherData() { /* ... */ }
}
但是,这并不是很干净,最终会导致复杂的控制器逻辑,这是MVC中的反模式。幸运的是,Laravel允许您使用View Composers,这可以大大清理您的控制器逻辑:

public function instances()
{
    return View::make('myview');
}

哇。很好,很简单。现在是视图作曲家部分:

// Inside of a service provider...
View::composer('search', 'App\Http\ViewComposers\AViewComposer');

use View;
class AViewComposer
{
    public function compose(View $view)
    {
        $view->with('instances', $this->instances());
        $view->with('accountIds', $this->accountIds());
    }

    public function instances()
    {
        // generate your instance data here and return it...
        return $instances;
    }

    public function accountIds()
    {
        // generate your account id data here and return it...
        return $accountIds;
    }
}

你可以更进一步,在这个视图作曲家的构造函数中注入另一个类,以完全卸载确定什么'实例'和'帐户ID'实际上意味着,如果你需要其他地方相同的功能。这将帮助您保持代码非常干燥。

答案 1 :(得分:0)

你有这两条路线,但有相同的域名,所以第二条路线在第二条路线上运行。

或者您更改了它们的网址,或者更改了post而不是get

的方法