首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从控制器以外的其他文件调用视图

如何从控制器以外的其他文件调用视图
EN

Stack Overflow用户
提问于 2016-01-19 08:33:46
回答 2查看 586关注 0票数 0

我正在创建一个Laravel5.2包,以下是我的文件:

代码语言:javascript
复制
packages/
-Shreeji/
--Ring/
---composer.json
---src/
----Ring.php
----RingModel.php
----RingServiceProvider
----Views/
-----ringslist.blade.php

composer.json

代码语言:javascript
复制
{
 "name": "shreeji/ring",
 "description": "Simple",
 "license": "MIT",
 "authors": [
     {
         "name": "author",
         "email": "email@gmail.com"
     }
 ],
 "autoload": {
        "psr-4": {
             "Shreeji\\Ring\\": "src/"
         }
     },
 "minimum-stability": "dev",
 "require": {
     "Illuminate/support": "~5"
 }
}

Ring.php

代码语言:javascript
复制
namespace Shreeji\Ring;

use Illuminate\Http\Response;

Class Ring {

function __construct() {

}

public function get_all()
{
    return view("ring::ringlist");
}

}

RingServiceProvider.php

代码语言:javascript
复制
namespace Shreeji\Ring;

use Illuminate\Support\ServiceProvider;

Class RingServiceProvider extends ServiceProvider
{
public function register()
{
    $this->app->bind('ring', function($app){
        return new Ring;
    });
}

public function boot()
{
    $this->loadViewsFrom(__DIR__ . '/Views', 'ring');
}
}

ringlist.blade.php

代码语言:javascript
复制
<!DOCTYPE html>
<html>

<body>

    <h1>Welcome</h1>

</body>
</html>

app/Http/Controllers中,我创建了如下所示的测试文件:

Ringcontroller.php

代码语言:javascript
复制
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Shreeji\Ring\Ring;

class RingController extends Controller
{

 public function index()
 {
     $ring = New Ring();
     $ring->get_all();
 }
}

当我调用控制器时,浏览器会继续加载并系统崩溃。我不知道是否可以像这样在任何控制器类之外使用view

如果我在从view文件调用Ring.php时做错了什么,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-20 04:01:44

我看到了几个问题:

  1. 您希望使用视图,但您的包不require illuminate/view包。您需要更新composer.json文件以要求"illuminate/view": "~5"
  2. view()函数是Illuminate\Foundation\helpers.php中包含的一个助手方法。除非您只想依赖于整个Laravel框架来实现这个功能,否则您需要创建自己的view()函数。代码在下面,你把它放在哪里取决于你自己。 如果(!)Function_exists(‘/**’){/***获取给定视图的评估视图内容。** @param字符串$view * @param数组$data * @param数组$mergeData *@返回$mergeData */ function视图($view= null,$data = [],$mergeData= []) { $factory = app(ViewFactory::class);if (func_num_args() === 0) {返回$factory;}返回$factory->make($view,$data,$mergeData);}
  3. 一旦视图开始工作,您就可以整天创建视图,但是如果您不从控制器中return任何内容,就不会看到任何东西。确保从控制器方法中返回一些内容。
票数 0
EN

Stack Overflow用户

发布于 2016-01-19 10:01:22

您可以使用类似于view的文档

在你的RingServiceProvider注册中,一个作曲家

代码语言:javascript
复制
use Illuminate\Contracts\View\Factory as ViewFactory;
public function boot(ViewFactory $view)
{
    $view->composer('*', 'App\Http\ViewComposers\SomeComposer');
}

App\Http\ViewComposers\SomeComposer

代码语言:javascript
复制
    use Illuminate\Contracts\View\View;
    public function compose(View $view)
    {
        $view->with('count', '1');
    }

玩它,基本上我使用它共享$variables在特定的视图,但也许这可以帮助你实现你想要的。

或者你可以直接用use Illuminate\Contracts\View\View;来加载你需要的视图!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34871902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档