我尝试将Twig-extensions加载到Silex但得到一个:
找不到'Twig_Extensions_Extension_Text'
我首先在自动加载器中注册Twig-Extensions:
$app['autoloader']->registerPrefixes(array( 'Twig_' => array(__DIR__.'/../vendor/Twig-extensions/fabpot/lib')));
Run Code Online (Sandbox Code Playgroud)
然后注册Twig:
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__ . '/../views',
'twig.class_path' => __DIR__ . '/../vendor/twig/lib',
));
Run Code Online (Sandbox Code Playgroud)
并添加扩展名.
$oldTwigConfiguration = isset($app['twig.configure']) ? $app['twig.configure']: function(){};
$app['twig.configure'] = $app->protect(function($twig) use ($oldTwigConfiguration) {
$oldTwigConfiguration($twig);
$twig->addExtension(new Twig_Extensions_Extension_Text());
});
Run Code Online (Sandbox Code Playgroud)
Pathes似乎是正确的,Twig本身也很好.
任何的想法?
这似乎应该工作,但我得到404错误.
我的应用程序如下所示:
LIB /的init.php:
$app = new Silex\Application();
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__.'/../views',
));
$app->register(new Silex\Provider\UrlGeneratorServiceProvider());
Run Code Online (Sandbox Code Playgroud)
和web/index.php:
require_once __DIR__.'/../lib/init.php';
$app->get('/about', function() use ($app) {
return $app['twig']->render('about.twig.html');
})
->bind('about');
$app->get('/', function() use ($app) {
return $app['twig']->render('index.twig.html');
})
->bind('homepage');
$app->run();
Run Code Online (Sandbox Code Playgroud)
我正在使用MAMP在我的本地机器上进行测试.当我访问localhost:8888/web时,它会使索引页面正常,没有问题,但访问localhost:8888/web/about会出现404错误.
这里发生了什么?
我在我的Silex应用程序中使用Knp\Snappy\Pdf生成pdf.文件名是随机的并保存到tmp目录中.
$filename = "/tmp/$random.pdf"
$snappy->generate('/tmp/body.html', $filename, array(), true);
Run Code Online (Sandbox Code Playgroud)
我想在回复中返回pdf,
$response = new Response(file_get_contents($filename));
$response->headers->set('Pragma', 'public');
$response->headers->set('Content-Type', 'application/pdf');
return $response;
Run Code Online (Sandbox Code Playgroud)
pdf正确显示在Web浏览器中.请求完成后,具有随机文件名的文件仍然存在.在返回响应之前,我无法取消链接文件.我已经尝试使用register_shutdown_function注册一个关闭函数并从那里取消链接文件.然而,这似乎不起作用.有任何想法吗?
我如何为表单身份验证提供程序设置success_handler(和failure_handler)?
Silex用这个配置忽略了我:
<?php
use WebFactory\Security\UserProvider;
$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
'dev' => array(
'pattern' => '^/(_(profiler|wdt)|css|images|js)/',
'security' => false
),
'default' => array(
'pattern' => '^/.*$',
'anonymous' => true,
'form' => array(
'login_path' => '/login',
'check_path' => '/login_check',
'success_handler' => 'authentication_handler', //<-- here
'failure_handler' => 'authentication_handler', //<-- here
),
'logout' => array('logout_path' => '/logout'),
'users' => $app->share(function () use ($app) {
return new UserProvider($app['db']);
}),
),
),
'security.access_rules' => array(
array('^/login', 'IS_AUTHENTICATED_ANONYMOUSLY'),
array('^/private$', 'ROLE_ADMIN'),
),
'security.role_hierarchy' => array(
'ROLE_SIMPLE_USER' …
Run Code Online (Sandbox Code Playgroud) 我目前正在使用带有Monolog的Silex Framework作为日志记录机制.通过使用以下组件 - https://github.com/silexphp/Silex-WebProfiler(Silex-WebProfiler),我能够成功地将默认的Symfony WebProfiler集成到我的项目中.它可以工作,但不幸的是它无法从其_profiler页面显示来自Monolog的日志消息.有人知道如何解决这个问题吗?
这是我的配置,如果这是相关的:
use Silex\Provider;
...
//Monolog
$app->register(new Provider\MonologServiceProvider(), array(
'monolog.logfile' => __DIR__ . '/../log/development.log',
'monolog.name' => 'MyAppName'
));
...
// Web Profiler
if ($app['debug']) {
$app->register(new Provider\WebProfilerServiceProvider(), array(
'profiler.cache_dir' => __DIR__.'/../cache/profiler/',
'profiler.mount_prefix' => '/_profiler', // this is the default
));
}
Run Code Online (Sandbox Code Playgroud) 我正在考虑制作一个可以用作微框架的精简版Laravel,有点像Symfony世界的Silex.
我想我需要使用Laravel的Illuminate\Routing组件(可通过Packagist获得)并创建一个新的Router实例,然后使用Request对象调用 - >在路由器上调度,但我不太确定这是否是正确的方法做到这一点.
我很感激你的建议/解决方案.
我有以下silex代码在完成时呈现一个简单的表单和消息:
$app->register(new Silex\Provider\FormServiceProvider\FormServiceProvider());
$app->register(new Silex\Provider\ValidatorServiceProvider());
$app->match('/contact', function(Request $request) use ($app) {
$form = $app['form.factory']->createBuilder('form', null)
->add('name', 'text', array('required' => true, 'label' => 'Name',))
->add('submit', 'submit')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
die('success);
}
return $app['twig']->render('contact.html.twig', array(
'form' => $form->createView(),
));
Run Code Online (Sandbox Code Playgroud)
但是在表单提交时,我会收到错误消息:
Call to undefined method Symfony\\Component\\Validator\\ExecutionContext::getValidator()
in /home/user/project/vendor/symfony/form/Symfony
/Component/Form/Extension/Validator/Constraints/FormValidator.php on line 56
Run Code Online (Sandbox Code Playgroud)
我正在注册上面的ValidatorServiceProvider,所以我很难理解它可能是什么.
我仍然是名称空间的新手,并且很难理解如何使用它们.我正在使用Silex Microframework并尝试设置我的文件夹结构.到目前为止,我有:
cms/
ACP/
Controller/
HomeController.php
View/
Front/
Controller/
HomeController.php
View/
Template/
page.php
home.php
app.php
bootstrap.php
Run Code Online (Sandbox Code Playgroud)
我正在尝试在Front/Controller文件夹中加载HomeController.在我的app.php文件中,我正在呼叫家里的控制器.
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app['debug'] = true;
$app->get("/", "cms\Front\Controller\HomeController::index");
$app->get('/test', function() {
return new Symfony\Component\HttpFoundation\Response("Test successful");
});
return $app;
Run Code Online (Sandbox Code Playgroud)
如果我进入/test
浏览器它工作正常.然而,当我去/
那时我得到一个错误.
ControllerResolver.php第153行中的InvalidArgumentException:
类"cms\Front\Controller\HomeController"不存在.
我已经cms
在composer.json和HomeController中定义为命名空间
<?php namespace cms\Front\Controller;
class HomeController {
public function index() {
return "Hello World, I'm the front page!";
}
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将HomeController.php
文件直接移动到cms
目录中,将文件中的命名空间更改为just cms
然后运行$app->get("/", "cms\HomeController::index");
,但它仍然无效.我得到了不存在的相同错误.
这是我的作曲家档案:
{
"require": …
Run Code Online (Sandbox Code Playgroud) 在尝试构建表单时,我收到此错误:
FormRegistry.php第87行中的InvalidArgumentException:无法加载类型"form"
我已经注册了FormServiceProvider,TranslationServicerProvider和ValidatorServiceProvider.
这是我的代码的相关部分:
$this->_form = $this->_app['form.factory']->createBuilder('form', $this->_map())
->add('firstName', 'text', [
'constraints' => [new Assert\NotBlank()]
])
->add('lastName', 'text', [
'constraints' => [new Assert\NotBlank()]
])
->add('email', 'text', [
'constraints' => [new Assert\Email()]
])
->getForm();
Run Code Online (Sandbox Code Playgroud)
以下是我正在使用的相关组件的版本号:
silex/silex v1.3.4基于Symfony组件的PHP微框架symfony/security-core
v3.0.1 Symfony安全组件 - 核心库symfony/security-csrf v3.0.1 Symfony安全组件 - CSRF库symfony/translation v3.0.1 Symfony Translation Component symfony/twig-bridge v3.0.1 Symfony Twig Bridge symfony/validator v3.0.1 Symfony Validator Component symfony/form v3.0.1
我能够在之前版本的Silex中成功地做到这一点; 做了什么破坏或我错过了什么?
我最近将我的Silex v1.3项目迁移到了Silex v2,其中一切正常.我得到一个枝条错误,我不明白原因
Twig_Error_Runtime in Template.php line 590:
Neither the property "request" nor one of the methods "request()", "getrequest()"/"isrequest()" or "__call()" exist and have public access in class "Silex\Application" in "index.twig" at line 5
Run Code Online (Sandbox Code Playgroud)
这是我的index.twig文件的第5行
{% extends "layout.twig" %}
{% block stylsheets %}
<link rel="stylesheet" type="text/css" href="{{ app.request.basepath }}/public/libs/odometer/themes/odometer-theme-minimal.css" />
Run Code Online (Sandbox Code Playgroud)
当然在布局中,我称之为
{% block stylsheets %}{% endblock %}
Run Code Online (Sandbox Code Playgroud)
但我完全不确定,问题出现在twig文件上......是否有必要改变?
这是控制器的摘录:
$app->get('/', function () use ($app) {
return $app['twig']->render('index.twig', [
...
]);
})->bind('homepage');
Run Code Online (Sandbox Code Playgroud)
感谢帮助