Я пытаюсь создать пакет 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');
}
}
Мне пришлось скопировать конфигурационный файл 'twigbridge.php' в каталог конфигурации Laravel, из TwigBridge пакета поставщика и не задействовать расширения формы и Html. Если есть лучший способ расширения конфигурации пакета без копирования всего файла, я был бы рад услышать его :) – benJ
Вы можете запустить 'php artisan vendor: publish -provider =" TwigBridge \ ServiceProvider "', который в основном копирует файл 'twigbride.php';) – mayrop