标签: silex

Twig基于isxmlhttprequest扩展

我正在使用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">&times;</button>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

另外可能值得一提的是我的代码包含在{%block content%}标记中.

有没有人有这个问题的经验?(仅当isXmlHttpRequest为false时才能扩展)

提前致谢

twig silex

3
推荐指数
1
解决办法
2358
查看次数

设置Silex项目 - 在哪里?

这是第一次使用Silex的一个非常基本的问题.

我想安装这个本教程链接的项目.我已按照这些说明通过Composer安装了Silex .

我需要知道的是,我应该将项目放在我用Composer安装时创建的Silex文件夹中吗?我是否需要为我使用它的每个项目创建一个新的Silex实例,或者我是否为所有项目使用一个,并将其保存在其他文件夹中?

我已经习惯了Drupal,如果这有助于回答这个问题.

silex

3
推荐指数
1
解决办法
1756
查看次数

在Twig中设置默认的原始过滤器

我正在使用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)

通过查看源代码,它看起来像这样:

&lt;span class=&#039;title light&#039;&gt;Contacto y&lt;/span&gt;&lt;br&gt;&lt;span class=&#039;title&#039;&gt;Ubicación&lt;/span&gt;
Run Code Online (Sandbox Code Playgroud)

我环顾了文档,并且知道可以在模板上使用原始过滤器来避免这种情况,如下所示:

{{ bannerTitle|raw }}
Run Code Online (Sandbox Code Playgroud)

但是我想尽可能保持模板上的代码干净,并避免将raw所有内容放到模板上。

有没有办法告诉Twig始终将生成的输出视为原始输出?

PS:我也尝试用htmlentities,html_entity_decode等解析生成的数据,但没有运气:(

php symfony twig silex

3
推荐指数
1
解决办法
3908
查看次数

无法在Silex应用程序中找到控制器

早上好,

在过去的几周里,我一直在使用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)

php silex

3
推荐指数
1
解决办法
3345
查看次数

silex如何使路由结束"/"可选

我正在使用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)

结尾"/"是可选的,只能指定一次路由吗?如何?

谢谢

php routes silex

3
推荐指数
1
解决办法
1663
查看次数

Silex:获取有关防火墙外路由的经过身份验证的用户信息

我正在使用Silex 2.0(我知道 - 它的开发版本尚未完全发布)以及CNAM的JWT安全提供程序(请参阅:https://github.com/cnam/security-jwt-service-provider)来编写API我正在写的一个开源应用程序.

简而言之,我关心的用户有三种类型:

  1. ROLE_ADMIN具有完全访问权限的全站点管理员()
  2. 委员(ROLE_COMMISH)谁创建他们拥有的对象,并可以编辑自己的对象
  3. 访问只读信息的匿名用户.

因此,有三个路段与这些"角色"一起:

  1. /admin/* 管理员可以执行他们的超级行动
  2. /commish/* 委员或管理员可以对其对象执行操作
  3. /* 所有用户都可以阅读信息

我遇到的问题是,虽然我可以设置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 security symfony jwt silex

3
推荐指数
1
解决办法
2022
查看次数

无法使用 Doctrine\DBAL\Schema\Table 创建表

我是 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 …

php symfony silex

3
推荐指数
1
解决办法
1917
查看次数

使用Silex下载文件作为下载

我的控制器是基本的

$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时,该文件在当前窗口中打开.

但是我不想在浏览器中打开文件,我想打开对话框来保存文件.

我怎样才能做到这一点 ?

php symfony silex

3
推荐指数
1
解决办法
1561
查看次数

恼人的Silex子目录.htaccess问题

我正在使用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)

apache mod-rewrite silex

2
推荐指数
1
解决办法
2231
查看次数

如何使用Symfony2路由组件将路由绑定到控制器

我想在我的小网站中使用独立的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)

抱歉我的英语......

php routing symfony silex

2
推荐指数
1
解决办法
810
查看次数

标签 统计

silex ×10

php ×7

symfony ×5

twig ×2

apache ×1

jwt ×1

mod-rewrite ×1

routes ×1

routing ×1

security ×1