我正在使用Twig和Silex,并且在if语句中遇到一些问题.基本上该页面甚至被扩展,请求不是由AJAX完成的.
{% if app.request.isXmlHttpRequest == false %}
{% extends 'layout.html.twig' %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
然而这是有效的.仅当请求是基于AJAX时才会显示该按钮.
{% if app.request.isXmlHttpRequest %}
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
{% endif %}
Run Code Online (Sandbox Code Playgroud)
另外可能值得一提的是我的代码包含在{%block content%}标记中.
有没有人有这个问题的经验?(仅当isXmlHttpRequest为false时才能扩展)
提前致谢
我正在使用Silex建立网站,并使用Twig根据json文件显示内容。
这是控制器中的代码:
$app->get('/', function() use ($app) {
$data = $app['data']->get('contactUs', 'es');
return $app['twig']->render('test.html', $data);
});
Run Code Online (Sandbox Code Playgroud)
Data
只是一个自定义类,将要显示的页面以及要使用的语言作为参数,并根据Twig用作页面上数据的json文件返回一个数组。
问题是json文件包含HTML标记,并且当Twig渲染页面时,它将它们显示为实体,例如,我的test.html模板如下所示:
<!DOCTYPE html>
<html>
<head>
<title>Twit Test</title>
</head>
<body>
{{ bannerTitle }}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但这输出以下内容{{ bannerTitle }}
:
<span class='title light'>Contact Us</span>
Run Code Online (Sandbox Code Playgroud)
通过查看源代码,它看起来像这样:
<span class='title light'>Contacto y</span><br><span class='title'>Ubicación</span>
Run Code Online (Sandbox Code Playgroud)
我环顾了文档,并且知道可以在模板上使用原始过滤器来避免这种情况,如下所示:
{{ bannerTitle|raw }}
Run Code Online (Sandbox Code Playgroud)
但是我想尽可能保持模板上的代码干净,并避免将raw
所有内容放到模板上。
有没有办法告诉Twig始终将生成的输出视为原始输出?
PS:我也尝试用htmlentities,html_entity_decode等解析生成的数据,但没有运气:(
早上好,
在过去的几周里,我一直在使用Silex开发一个应用程序,昨晚我要么对我的代码进行了更改,要么更新了作为更新作曲家的一部分,但它不起作用.
我正在使用'Igorw\ConfigServiceProvider'来加载链接到我配置的控制器的路由.但是当我访问网页时,我收到错误消息:
InvalidArgumentException: Unable to find controller "controllers.admin:index".
Run Code Online (Sandbox Code Playgroud)
我的文件如下
composer.json
{
"require": {
"silex/silex": "1.2.*@dev",
"igorw/config-service-provider": "1.2.*@dev",
"symfony/yaml": "2.5.*@dev"
},
"autoload": {
"psr-4": {
"Turtle\\Controllers\\": "src/turtle/controllers"
}
}
}
Run Code Online (Sandbox Code Playgroud)
配置/ routes.yml
config.routes:
admin:
pattern: /admin
defaults: { _controller: 'controllers.admin:index' }
method: GET
Run Code Online (Sandbox Code Playgroud)
网络/ index.php文件
<?php
require_once __DIR__ . '/../vendor/autoload.php';
use \Igorw\Silex\ConfigServiceProvider;
use \Turtle\Controllers\AdminController;
$app = new Silex\Application;
$app["debug"] = true;
// load the routes
$app -> register (new ConfigServiceProvider(__DIR__ . "/../config/routes.yml"));
foreach ($app["config.routes"] as $name => $route) {
$app …
Run Code Online (Sandbox Code Playgroud) 我正在使用Silex 1.1和PHP 5.3,如何在路由中选择结尾"/"?
目前我有两条路线做同样的事情
$app->get('/item/{id}/', function( $id ) use ($app) {
/** Codes Here **/
});
$app->get('/item/{id}', function( $id ) use ($app) {
/** Codes Here **/
});
Run Code Online (Sandbox Code Playgroud)
结尾"/"是可选的,只能指定一次路由吗?如何?
谢谢
我正在使用Silex 2.0(我知道 - 它的开发版本尚未完全发布)以及CNAM的JWT安全提供程序(请参阅:https://github.com/cnam/security-jwt-service-provider)来编写API我正在写的一个开源应用程序.
简而言之,我关心的用户有三种类型:
ROLE_ADMIN
具有完全访问权限的全站点管理员()ROLE_COMMISH
)谁创建他们拥有的对象,并可以编辑自己的对象因此,有三个路段与这些"角色"一起:
/admin/*
管理员可以执行他们的超级行动/commish/*
委员或管理员可以对其对象执行操作/*
所有用户都可以阅读信息我遇到的问题是,虽然我可以设置3个防火墙,每个防火墙一个,但在第3个路由类别(GET /object/1
例如)中有时需要匿名访问,但是如果用户提供有效的JWT令牌,我需要访问该用户,以便对我在回复中提交的数据执行一些额外的逻辑.
正如我现在设置的那样(更多在我的配置下面),它是全有或全无:我要么将整个防火墙限制为只有具有某个角色的经过身份验证的用户,要么我将其打开给匿名用户(因此无法查看用户)信息).
是否有可能有任何人可以击中的路线,但也可以看到登录用户?
目前的安全配置:
$app['users'] = function () use ($app) {
return new UserProvider($app);
};
$app['security.jwt'] = [
'secret_key' => AUTH_KEY,
'life_time' => 86400,
'algorithm' => ['HS256'],
'options' => [
'header_name' => 'X-Access-Token'
]
];
$app['security.firewalls'] = array(
'login' => [
'pattern' => 'login|register|verify|lostPassword|resetPassword',
'anonymous' => true,
],
'admin' => array(
'pattern' => '^/admin',
'logout' …
Run Code Online (Sandbox Code Playgroud) 我是 php、Silex 的新手,我正在代码库之上使用这些技术开发一个小型应用程序。
从代码库中我得到一个数据库对象 - $app['db'] - (类似于连接对象)像这样 -
$app->register(new Silex\Provider\DoctrineServiceProvider(), array(
'db.options' => array(
'driver' => 'pdo_sqlite',
'path' => __DIR__.'/app.db',
),
));
Run Code Online (Sandbox Code Playgroud)
$app['db'] 可用于从现有数据库中获取数据并且工作正常。
但是当我尝试使用以下代码将表添加到现有数据库时 -
use Doctrine\DBAL\Schema\Table;
$schema = $app['db']->getSchemaManager();
if (!$schema->tablesExist('users'))
{
$users = new Table('users');
$users->addColumn('id', 'integer', array('unsigned' => true, 'autoincrement' => true));
$users->setPrimaryKey(array('id'));
$users->addColumn('username', 'string', array('length' => 32));
$users->addUniqueIndex(array('username'));
$users->addColumn('password', 'string', array('length' => 255));
}
Run Code Online (Sandbox Code Playgroud)
然后尝试在用户表中插入记录时出现以下异常 -
AbstractSQLiteDriver.php 第 58 行中的 3/3 TableNotFoundException:执行“SELECT * FROM users WHERE id = ?”时发生异常 参数 [0]:
SQLSTATE[HY000]:一般错误:1 没有这样的表:用户
PDOConnection.php …
我的控制器是基本的
$app->get('/files/{type}', function ($type) use ($app) {
$path = __DIR__ . "/../files/$type";
if (!file_exists($path)) {
$app->abort(404, "Ce fichier n'existe pas.");
}
return $app
->sendFile($path)
;
})->bind('getfile');
Run Code Online (Sandbox Code Playgroud)
根据这个文档它是有效的.当我调用正确的URL时,该文件在当前窗口中打开.
但是我不想在浏览器中打开文件,我想打开对话框来保存文件.
我怎样才能做到这一点 ?
我正在使用Silex进行一些项目,而且我们都无法使.htaccess文件正常工作.当前目录结构是http://localhost/IIV/
Silex中的前端文件位于 http://localhost/IIV/web/index.php
这就是我目前所拥有的:
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /IIV/
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l
RewriteRule ^ - [L]
RewriteCond %{DOCUMENT_ROOT}/web/$1 -f
RewriteRule ^(.+?)/?$ /web/$1 [L]
RewriteCond %{DOCUMENT_ROOT}/web/$1 !-f
RewriteRule ^(.+?)/?$ /web/index.php [L]
RewriteRule ^(.+?)/?$ /web/index_dev.php [L]
Run Code Online (Sandbox Code Playgroud) 我想在我的小网站中使用独立的Symfony2路由组件.我根据文档和一些例子创建了这个:
$request = Request::createFromGlobals();
$routeTest = new Symfony\Component\Routing\Route('/route-test', array('controller' => 'test'));
$routes = new Symfony\Component\Routing\RouteCollection();
$routes->add('test', $routeTest);
$context = new Symfony\Component\Routing\RequestContext();
$context->fromRequest($request);
$matcher = new Symfony\Component\Routing\Matcher\UrlMatcher($routes, $context);
$matcher->match($request->getPathInfo());
Run Code Online (Sandbox Code Playgroud)
我不明白我应该如何调用我的控制器测试,我已经传递给了Route构造函数.因此,我希望得到像Silex Route匹配的东西:
$app->get('/hello/{name}', function($name) use($app) {
return 'Hello '.$app->escape($name);
});
Run Code Online (Sandbox Code Playgroud)
抱歉我的英语......