在Laravel中的所有控制器的所有方法中传递对象

时间:2018-01-05 07:37:51

标签: laravel

我在HomeController @ index中有这段代码:

$towns = Town::all();
return Redirect::to('home')
                ->with('towns', $towns);

有没有办法告诉Laravel在我定义的方法和控制器结束之前执行那些代码行而没有复制并粘贴每个方法中的代码行?

3 个答案:

答案 0 :(得分:1)

您不需要这样做,您可以使用服务提供商中的view()->share()方法与所有观看次数共享此数据:

view()->share('towns', Town::all());

您也可以使用a view composer

public function compose(View $view)
{
    $view->with('towns', Town::all());
}

答案 1 :(得分:-1)

您可以从基本控制器扩展所有控制器。在app / Http / Controllers / controller.php上使用Controller.php或创建新的。

将myThreeLines添加到基本控制器。

Controller.php这样:

function myThreeLines(){
    $towns = Town::all();
    return Redirect::to('home')
            ->with('towns', $towns);
}

class TestController extend Controller{

    function index(){

        return $this->myThreeLines();

    }
}

答案 2 :(得分:-1)

感谢@ alexey-mezenin的解决方案是:

应用\提供商\ AppServiceProvider.php

use App\Town;

class AppServiceProvider extends ServiceProvider {

    public function boot() {
        view()->share('towns', Town::all());
    }

谢谢大家的帮助:)