我尝试创建一个使用Twigbridge
而不是.php
视图的Laravel 5.1软件包。我可以获得正常的.php
观看次数,但是当我尝试使用.twig
模板时,我只会遇到错误。在为Laravel包创建视图时是否可以使用Twigbridge模板,或者我们几乎坚持使用blade
和php
?
编辑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');
}
}
答案 0 :(得分:0)
您可以在simple.twig而不是{% extends 'templates/master.twig' %}
中尝试使用{% extends 'templates.master' %}
。
答案 1 :(得分:0)
很抱歉回答我自己的问题,但我发现答案是参考包裹。因此{% extends 'folder.file' %}
变为{% extends 'packagename::folder/file' %}
。
成功加载文件,但它没有回答如何使{{ form_text() }}
等函数正常工作。由于我正在使用rcrowe/twigbridge
,有没有办法让函数工作?