2015-06-19 3 views
0

Я пытаюсь создать пакет Laravel 5.1, который использует Twigbridge вместо .php просмотров. Я могу получить нормальные .php просмотров, чтобы отобразить все, но когда я пытаюсь использовать шаблоны .twig, я встречаюсь только с ошибкой. Можно ли использовать шаблоны Twigbridge при создании представлений для пакета Laravel или мы довольно сильно застряли в blade и php?Использование Twigbridge в пакете Laravel 5.1

Редактировать 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 %} 

Мои шаблоны/master.twig файл имеет {% block content %} Hello World {% endblock %} в нем.

Мой composer.json

{ 
    "name": "username/mypackage", 
    "description": "", 
    "license": "MIT", 
    "keywords": ["laravel"], 
    "authors": [ 
     { 
      "name": "username", 
      "email": "[email protected]" 
     } 
    ], 
    "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'); 
    } 

} 

ответ

0

Извините, что ответили на мой вопрос, но я узнал, что ответ должен был касаться пакета. Таким образом, {% extends 'folder.file' %} становится {% extends 'packagename::folder/file' %}.

Это успешно загружает файл, но он не отвечает, как получить такие функции, как {{ form_text() }}. Поскольку я использую rcrowe/twigbridge, есть ли способ заставить эти функции работать?

+0

Мне пришлось скопировать конфигурационный файл 'twigbridge.php' в каталог конфигурации Laravel, из TwigBridge пакета поставщика и не задействовать расширения формы и Html. Если есть лучший способ расширения конфигурации пакета без копирования всего файла, я был бы рад услышать его :) – benJ

+0

Вы можете запустить 'php artisan vendor: publish -provider =" TwigBridge \ ServiceProvider "', который в основном копирует файл 'twigbride.php';) – mayrop

0

Вы можете попробовать {% extends 'templates/master.twig' %} в simple.twig вместо {% extends 'templates.master' %}.

+0

Это потому, что ваш шаблон (master.twig) находится в очень низкой папке, чем его дочерний файл (simple.twig) – gildniy

Смежные вопросы