Laravel:从视图编辑器

时间:2017-06-12 13:57:25

标签: laravel laravel-5.4

Atm我正在创建这个视图作曲家以获得乐趣。它正在收集.js文件名,然后将其传递给要链接的布局。使用的文件名取决于当前页面。例如,像Slides这样排名较低的页面不包括UserManagement中使用的ajax请求。请不要问我为什么要这样做xD。我打算无论如何都要验证请求。只是觉得无聊。

无论如何,因为我对laravel很新,我仍然在寻找更有效的方法来做事。 Atm Im静态访问文件名。 Controller现在看起来像这样

class Controller extends BaseController
{
    public static $js_file_names = [];
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

在页面控制器中,我构造了文件名:

class SlidesController extends Controller
{
    public function __construct()
    {
        parent::$js_file_names = ['ccs', 'ajax-updates'];
    }

最后我在注册的Viewcomposer中检索它们,如下所示: (在开发过程中,$ use_filenames将所有文件保留为默认值)

public function __construct()
{
    $filenames = Controller::$js_file_names;
    if( !empty($filenames) )
        $this->use_filenames = $filenames;

    var_dump($this->use_filenames);die;
}

这一切似乎都运行良好,但最大的问题是,是否有更好的方法从viewcomposer中访问控制器数据?每次我尝试谷歌这个,我得到的结果,如“将数据传递给视图”等,这不是问题。

更新: 我的另一个想法是在viewcomposer本身内存储要在数组中使用的所有文件名,并检查该数组中是否存在当前页面。这样可以使控制器更清洁。

1 个答案:

答案 0 :(得分:1)

在这种情况下,使用视图编辑器并没有多大意义。由于您的控制器已经“知道”他们想要共享哪些文件,您可以将它们传递给视图,如下所示:

class SlidesController extends Controller
{
    public function __construct()
    {
        View::share('user_filenames', ['ccs', 'ajax-updates']);
    }
}

例如,作曲家更多地用于共享具体元素,例如用户集合,服务提供者或其他类实例。