在Laravel 5.1软件包中使用Twigbridge

时间:2015-06-19 15:04:18

标签: laravel twig

我尝试创建一个使用Twigbridge而不是.php视图的Laravel 5.1软件包。我可以获得正常的.php观看次数,但是当我尝试使用.twig模板时,我只会遇到错误。在为Laravel包创建视图时是否可以使用Twigbridge模板,或者我们几乎坚持使用bladephp

编辑1:加载Twig模板而不扩展任何内容。我开始使用{% extends 'file' %}时出现错误。

我收到此错误

Error loading /virtual/laravel/packages/username/mypackage/src/Views/sample.twig:
Template "templates.master" is not defined () in
"/virtual/laravel/packages/username/mypackage/src/Views/sample.twig" at line 1.

我的文件夹

username
    |_ mypackage
        |_ src
            |_ Controllers
                - SampleController.php
            |_ Views
                |_ templates
                        - master.twig
                - sample.twig

Twig模板 sample.twig

{% extends 'templates.master' %}

{% block content %}
    {{ parent() }}
{% endblock %}

我的 templates / master.twig 文件中包含{% block content %} Hello World {% endblock %}

我的 composer.json

{
    "name": "username/mypackage",
    "description": "",
    "license": "MIT",
    "keywords": ["laravel"],
    "authors": [
        {
            "name": "username",
            "email": "username@gmail.com"
        }
    ],
    "require": {
        "rcrowe/twigbridge": "0.7.x"
    },
    "minimum-stability": "stable"
}

我的服务提供商(简化)

<?php namespace Username\MyPackage;

use Illuminate\Support\ServiceProvider;

class MyPackageServiceProvider extends ServiceProvider {

    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {   
        // Route
        include __DIR__.'/routes.php';
    }

    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        // This line works fine for normal .php views but for some reason not for .twig views
        $this->loadViewsFrom(__DIR__ . '/Views', 'mypackage');

        // Providers
        $this->app->register('TwigBridge\ServiceProvider');

        // Aliases
        $loader = \Illuminate\Foundation\AliasLoader::getInstance();
        $loader->alias('Twig', 'TwigBridge\Facade\Twig');

        $this->app['mypackage'] = $this->app->share(function($app) {
            return new MyPackage;
        });
    }

    /**
    * Register a view file namespace.
    *
    * @param  string  $namespace
    * @param  string  $path
    * @return void
    */
    protected function loadViewsFrom($path, $namespace)  
    {
        if (is_dir($appPath = $this->app->basePath().'/resources/views/vendor/'.$namespace)) {
            $this->app['view']->addNamespace($namespace, $appPath);
        }
        $this->app['view']->addNamespace($namespace, $path);
    }
    /*
    */

}

控制器非常基本

<?php namespace Username\MyPackage\Controllers;

use App\Http\Controllers\Controller;

class SampleController extends Controller {

    public function sample() {
        return view('mypackage::sample');
    }

}

2 个答案:

答案 0 :(得分:0)

您可以在simple.twig而不是{% extends 'templates/master.twig' %}中尝试使用{% extends 'templates.master' %}

答案 1 :(得分:0)

很抱歉回答我自己的问题,但我发现答案是参考包裹。因此{% extends 'folder.file' %}变为{% extends 'packagename::folder/file' %}

成功加载文件,但它没有回答如何使{{ form_text() }}等函数正常工作。由于我正在使用rcrowe/twigbridge,有没有办法让函数工作?