小编use*_*356的帖子

为什么Symfony 2安装到Web根目录?

我正在寻找下载和学习Symfony 2.我之前没有真正看过PHP框架.

我知道这里不允许讨论,但我很确定我的问题不是主观的,我的问题有一个明显的答案.

为什么Symfony 2下载到公共Web根目录?

当然它应该是非公开的,只有HTML/CSS等应该公开?

显然我错了,但是会理解这个的原因.

这是不是意味着有人可以访问http://mysite.com/symfony/classes/database.php等(不是特定的URL,只是为了突出我的观点)并运行各种脚本?显然这可能只是一个类文件,但它仍然没有;对我来说似乎是对的.

此外,我想在同一框架上运行5或6个不同的站点.如果它安装在Web根目录中,那么这并不意味着我需要为每个站点(在每个站点的Web根目录中)安装整个Symfony代码库 - 就好像它是在Web根目录之外托管的那样,每个站点都可以引用它(例如'../../symfony/classes/database.php'等)(只要所有站点都在同一台服务器上).

我必须错过一些非常明确和明显的东西.

php symfony

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

Symfony2中带有变量的简单Twig IF语句

我试图只包含一些基于IF语句的HTML:

{% if "{{ app.request.attributes.get('var_name') }}" != "" %}
<meta id="var_name" content="{{ app.request.attributes.get('var_name') }}" />
{% endif %}
Run Code Online (Sandbox Code Playgroud)

如果var_name变量保存数据,则上述操作将完全按预期工作,但如果它为空或未定义,则它总是返回HTML,如下所示:

<meta id="var_name" content="" />
Run Code Online (Sandbox Code Playgroud)

...所以基本上它将IF语句注册为true,即使没有任何显示.

如果定义了变量,则没有区别.

这个:

{% if {{ app.request.attributes.get('var_name') }} != "" %}
Run Code Online (Sandbox Code Playgroud)

...返回此错误:

散列键必须是带引号的字符串,数字,名称或括在括号中的表达式(值为"{"的意外标记"标点符号"...

我该怎么做?

symfony twig

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

在 Twig 函数中使用变量

我就是无法让它发挥作用:

它应该根据 var_1 的 URL 查询字符串值设置 var_2

问题是我用 {{var_1}} 调用 var_1

我尝试过各种其他方法,但都会引发不同的错误。

// var_3 set elsewhere

{% set var_1 %}test-{{var_3}}{% endset %}

{% set var_2 = app.request.get({{var_1}}) %}

// need var_2 set for rest of script
Run Code Online (Sandbox Code Playgroud)

twig

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

如何从 Generic 获取实例?

我只是不明白为什么这会导致错误(错误在代码中显示为注释):

class SomeClass {
    var id = 123
}

class AnotherClass {
    func myFunc<T>(object: T) {
        T.id = 555 // Error: Type 'T' has no member 'id'
        object.id = 555 // Error: Value of type 'T' has no member 'id'
    }
}

let someClass = SomeClass()
let anotherClass = AnotherClass()
anotherClass.myFunc(someClass)
Run Code Online (Sandbox Code Playgroud)

将 someClass 的实例传递给泛型函数后如何获取它?

此外,我无法在 AnotherClass 中进行任何命名向下转换(正如您对泛型所期望的那样)。

generics swift

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

编写此Symfony2 URL重定向的更好方法

这有效,但它很混乱.我一直在搞乱参数包,但没有什么比我的代码更好.

我只是想重定向到同一页面并删除一个查询字符串,但要比它更好地编码:

$r = $this->request;

$url = $r->getUri();

$replace = "abc=" . $r->query->get( 'abc' );
$url = str_replace("?".$replace, "?", $url);
$url = str_replace("&".$replace, "", $url);

$response = new RedirectResponse($url);
$this->event->setResponse($response);
Run Code Online (Sandbox Code Playgroud)

symfony

0
推荐指数
1
解决办法
1788
查看次数

糟糕的PHP代码.请帮助改进

显然,这是非常糟糕的代码,但我无法思考如何改进它."测试"功能根本无法改变,但其他所有功能都可以.

我想将一个值数组传递给一个操作测试函数的函数.关键是我需要在测试函数中使用所有预定义的函数变量值,而无需重新声明它们.

我不能直接操作测试功能,它必须通过另一个功能.

这只是一个更大问题的演示,但解决这个问题肯定会解决我的问题.如果无法完成,我需要完全重新思考很多事情.

function test($p1, $p2="hello", $p3=5, $p4=true) {

}
Run Code Online (Sandbox Code Playgroud)

-

function action($vars = array()) {

    $count = count($vars);

    switch($count) {

        case 1:
            $result = test($vars[0]);
            break;
        case 2:
            $result = test($vars[0], $vars[1]);
            break;
        case 3:
            $result = test($vars[0], $vars[1], $vars[2]);
            break;
        case 4:
            $result = test($vars[0], $vars[1], $vars[2], $vars[3]);
            break;

    }

    return $result;

}
Run Code Online (Sandbox Code Playgroud)

-

action(array(1, "test"));
Run Code Online (Sandbox Code Playgroud)

php

0
推荐指数
1
解决办法
164
查看次数

扩展Symfony2控制器

这作为普通控制器工作正常:

namespace BundleName\Bundle\SiteBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class DefaultController extends Controller
{
    public function indexAction()
    {

        return $this->render('MyBundle:Default:index.html.twig', array("abc" => "test"));

    }

}
Run Code Online (Sandbox Code Playgroud)

...所以肯定通过这样做它应该只是扩展控制器:

namespace BundleName\Bundle\SiteBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class ControllerExtension extends Controller
{
    public function render(string $view, array $parameters = array(), Response $response = null)
    {

        return parent::render($view, $parameters, $response);

    }

}

class DefaultController extends ControllerExtension
{
    public function indexAction()
    {

        return $this->render('MyBundle:Default:index.html.twig', array("abc" => "test"));

    }

}
Run Code Online (Sandbox Code Playgroud)

..但我得到这个错误:

运行时注意:声明... ControllerExtension :: render()应该与Symfony\Bundle\FrameworkBundle\Controller\Controller :: render()的声明兼容... Bundle/SiteBundle/Controller/DefaultController.php

添加这个没有区别(这是我在某处看到的修复):

use Symfony\Component\HttpFoundation\Response 
Run Code Online (Sandbox Code Playgroud)

symfony

0
推荐指数
1
解决办法
3149
查看次数

在Symfony2事件中引用Translator

我知道我可以在控制器中使用它:

$this->get('translator')->trans('key_name')
Run Code Online (Sandbox Code Playgroud)

...但是如何在Symfony2 GetResponseEvent或FilterResponseEvent事件中引用转换器?

我知道我可以使用 - > getRequest()但我不知道如何从Request对象中获取它.

symfony

0
推荐指数
1
解决办法
3061
查看次数

几乎完成 - 只需要完成Twig扩展即可呈现ESI - Symfony2

我想创建一个Twig扩展并使用它:

{{ new_func(route-name) }}
Run Code Online (Sandbox Code Playgroud)

做同样的事情:

{{ render_esi(url(route-name)) }}
Run Code Online (Sandbox Code Playgroud)

......但有一些调整

它已接近完成,但这条线需要更改,但我无法看到如何从此代码(在Twig之外)调用ESI:

return $environment->render($route);   /// needs to receive route and render an ESI
Run Code Online (Sandbox Code Playgroud)

-

namespace Acme\Bundle\MyBundle\Twig;

class NewTwigFunction extends \Twig_Extension
{

    private $request;

    public function __construct($container)
    {
        $this->request = $container->get('request');
    }

    public function getFunctions() {

        return array(
            'new_func' => new \Twig_Function_Method($this, 'newFunction', array('needs_environment' => true) )
        );

    }

    public function newFunction(\Twig_Environment $environment, $route) {

        $r = $this->request;

        return $environment->render($route);

    }

    public function getName() {

        return "new_func";

    }

 }
Run Code Online (Sandbox Code Playgroud)

symfony twig

0
推荐指数
1
解决办法
1406
查看次数

Symfony 2 验证器 - 如何返回数组

我需要 Symfony2 验证器返回一个数组而不是一个对象。

所以像这样:

$insert = new MyEntity();
$insert->setTest1( 'testtesttest' );
$validator = $this->get('validator');
$errors = $validator->validate($insert);
Run Code Online (Sandbox Code Playgroud)

...将启用此功能:

$errors[0]['message'] = "The email is not valid"
Run Code Online (Sandbox Code Playgroud)

只是一个简单的数组,因为解析返回的对象是非常困难的。

我了解验证器配置,但我只需要验证器返回一个数组而不是通常的对象。

我对结果进行 JSON 编码,并且 (a) json_encode 与对象斗争 + (b) 我不想仅返回整个对象的错误列表。

我没有使用内置表单,只是使用原始验证器。

php validation json symfony

0
推荐指数
1
解决办法
2475
查看次数

如何运行Ruby on Rails应用程序?

忘记任何形式的服务器配置(例如,启用站点的/ Apache / nginx)。想象一下,我的所有文件都可以在Web服务器上公开访问。

我有以下可用的文件夹:

/app/assets

/app/controllers

/app/helpers

/app/mailers

/app/models

/app/observers

/app/uploaders

/app/views

/public/
Run Code Online (Sandbox Code Playgroud)

我没有更多的文件夹了。

如果我转到domain.com/public/htmlpage.html,那么我可以看到HTML可以很好地呈现。如果我转到domain.com/public/,则会收到“索引文件不存在”的消息。

如何运行Rails应用程序?我应该在网络浏览器中运行什么文件?

ruby ruby-on-rails

-5
推荐指数
1
解决办法
735
查看次数

标签 统计

symfony ×7

php ×3

twig ×3

generics ×1

json ×1

ruby ×1

ruby-on-rails ×1

swift ×1

validation ×1