小编Rey*_*rPM的帖子

Symfony2:注入@ security.context以获取当前用户.如何避免"ServiceCircularReferenceException"?注入整个容器?

来自这个帖子和修复后的东西我在另一个问题/安全问题/问题.

正如你在其他帖子中看到的那样,我正在尝试在监听器中注入安全上下文,但是如果我保持代码完整而没有触摸我得到了这个错误:

ServiceCircularReferenceException:检测到服务"doctrine.orm.default_entity_manager"的循环引用

因此,阅读和研究我找到了一个解决方案,但我不清楚它是否是正确的,或者它对我的应用程序是否安全.所以这就是我做的:

而不是注入[@security.context]我这样做:

services:
    orderhascomment.listener:
        class: PL\OrderBundle\Listener\OrderHasCommentListener
        arguments: [@service_container]
        tags:
            - { name: doctrine.event_listener, event: prePersist, method: onPrePersist }
Run Code Online (Sandbox Code Playgroud)

我的听众OrderHasCommentListener.php如下:

namespace PL\OrderBundle\Listener;

use Doctrine\ORM\Event\LifecycleEventArgs;
use Symfony\Component\DependencyInjection\ContainerInterface;

class OrderHasCommentListener {

    protected $container;

    public function __construct(ContainerInterface $container = null) {
        $this->container = $container;
    }

    /**
     *
     * @param LifecycleEventArgs $args 
     */
    public function onPrePersist(LifecycleEventArgs $args) {

        $entity = $args->getEntity();
        $user = $this->container->get('security.context')->getToken()->getUser();
        $entity->setUser($user);
    }

}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?还是存在另一个?我认为注入整个容器是一个坏主意,因为我只需要安全上下文,那么解决方案是什么?(https://insight.sensiolabs.com/what-we-analyse)

试图在服务中转换UserCallable

我正在尝试UserCallable按照这里的说明转换服务,看看 …

security dependency-injection symfony doctrine-orm

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

使用 Fixtures 加载后删除灯具

我正在对我的代码进行一些测试,但我得到了第一个“停止”,因为我不知道如何继续前进。在我的函数中看到setUp()我加载装置:

public function setUp() {
    static::$kernel = static::createKernel();
    static::$kernel->boot();
    $this->em = static::$kernel->getContainer()->get('doctrine')->getManager();
    $this->user = $this->createUser();

    $fix = new MetaDetailGroupFixtures();
    $fix->load($this->em);

    parent::setUp();
}
Run Code Online (Sandbox Code Playgroud)

但后来我删除了创建的数据,因为我对坏情况进行了测试(当不返回实体时):

public function testListMetaDetailGroupFailAction() {
    $client = static::createClient();
    $this->logIn($client, $this->user);

    $route = $client->getContainer()->get('router')->generate('meta-detail-group-list', array('parent_id' => 20000), false);
    $client->request("GET", $route);

    $decoded = json_decode($client->getResponse()->getContent(), true);

    $this->assertCount(0, $decoded['entities']);
    $this->assertArrayHasKey('success', $decoded);
    $this->assertJsonStringEqualsJsonString(json_encode(array("success" => false, "message" => "No existen grupos de metadetalles de productos creados")), $client->getResponse()->getContent());
    $this->assertSame(200, $client->getResponse()->getStatusCode());
    $this->assertSame('application/json', $client->getResponse()->headers->get('Content-Type'));
    $this->assertNotEmpty($client->getResponse()->getContent());
}
Run Code Online (Sandbox Code Playgroud)

由于记录是在安装程序中创建的,并且它们保留在数据库中,因此测试失败。对此有什么建议吗?你的是怎么解决的?

testing unit-testing functional-testing symfony

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

从WP_List_Table代码处理Wordpress中的搜索

我需要使用WP_List_TableI read 添加对搜索或过滤项目的支持,并且不知道如何完成此操作.我已经通过以下代码添加了该框:

function ft_list()
{
    echo '</pre><div class="wrap"><h2>' . __('Frequent Traveler List') . '</h2>';
    $ftList = new FT_WP_Table();
    $ftList->search_box('search', 'search_id');
    echo '</div>';
}
Run Code Online (Sandbox Code Playgroud)

这就是我的prepare_items()函数的样子:

public function prepare_items()
{
    $searchcol = array(
        'firstname',
        'lastname',
        'foid',
        'no_frequent',
        'create_time'
    );

    $columns = $this->get_columns();
    $hidden = array();
    $sortable = $this->get_sortable_columns();
    $this->_column_headers = array(
        $columns,
        $hidden,
        $sortable
    );

    // SQL results
    $posts = $this->get_sql_results();
    empty($posts) AND $posts = array();

    # >>>> Pagination
    $per_page = $this->posts_per_page;
    $current_page = $this->get_pagenum();
    $total_items = …
Run Code Online (Sandbox Code Playgroud)

php wordpress wordpress-plugin

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

如果未登录,则重定向到"/ login"

/login如果出现以下情况,我需要将所有人重定向到

  • 访问/路线(app.phpapp_dev.php)
  • 尝试访问任何受限制的区域,客户端属于组或拥有正确的凭据,但它没有登录(不太确定这是必要的,因为Symfony可能会处理此部分)

所以我在我这样做了security.yml:

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        main:
            pattern: ^/
            anonymous: ~
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true

        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }
Run Code Online (Sandbox Code Playgroud)

这个在routing.yml:

common:
    resource: "@CommonBundle/Controller/"
    type: …
Run Code Online (Sandbox Code Playgroud)

php symfony fosuserbundle symfony-2.4

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

在表格或表格内部形成表格,哪一个是有效的Twitter Bootstrap标记的权利?

我正在研究一个基于Twitter Bootstrap的模板,我有一个疑问,标题是:表格里面的表格或表格,哪一个是有效的Twitter Bootstrap标记的权利?两者都有效吗?

第一个加价:

<form id="fabForm" method="post">
    <div class="form-group">
        <div class="table-responsive">
            <table class="table table-condensed">
                <thead>
                    <tr>
                        <th></th>
                        <th>Col Title</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>
                            <div class="checkbox">
                                <label>
                                    <input type="checkbox" name="fabLinkChoice[]" value="1">
                                </label>
                            </div>
                        </td>
                        <td>Dist1</td>                           
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
    <div>
        <button type="submit" class="btn btn-primary" disabled="" id="btnAgregarSelFabricante"><i class="fa fa-save"></i> Add</button>
    </div>
</form>
Run Code Online (Sandbox Code Playgroud)

第二次加价:

        <div class="table-responsive">
            <table class="table table-condensed">
                <thead>
                    <tr>
                        <th></th>
                        <th>Col Title</th>
                    </tr>
                </thead>
                <tbody>
                     <form id="fabForm" method="post">
                         <div class="form-group">
                             <tr>
                                  <td>
                                      <div class="checkbox">
                                           <label>
                                               <input type="checkbox" name="fabLinkChoice[]" …
Run Code Online (Sandbox Code Playgroud)

html html5 twitter-bootstrap

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

如何在Docker中构建映像时执行脚本

我的结尾处有以下内容Dockerfile:

ENTRYPOINT bash -C '/usr/local/bin/setup_php_settings';'bash'
Run Code Online (Sandbox Code Playgroud)

如果我没错,/usr/local/bin/setup_php_settings每次启动容器时都会执行.如果是这样,那么我在该脚本中有一些安装内容(比如这个 ZRay),我想转移到另一个脚本,它只能在图像构建过程中执行一次.

的内容setup_php_settings(在内部消除部分ZRay)如下:

#!/bin/bash -x
set -e

PHP_ERROR_REPORTING=${PHP_ERROR_REPORTING:-"E_ALL & ~E_DEPRECATED & ~E_NOTICE"}
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/apache2/php.ini
sed -ri 's/^display_errors\s*=\s*Off/display_errors = On/g' /etc/php5/cli/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/apache2/php.ini
sed -ri "s/^error_reporting\s*=.*$//g" /etc/php5/cli/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/apache2/php.ini
echo "error_reporting = $PHP_ERROR_REPORTING" >> /etc/php5/cli/php.ini

mkdir -p /data/tmp/php/uploads
mkdir -p /data/tmp/php/sessions
mkdir -p /data/tmp/php/xdebug
chown -R www-data:www-data /data/tmp/php*

ln -sf /etc/php5/mods-available/zz-php.ini /etc/php5/apache2/conf.d/zz-php.ini
ln -sf /etc/php5/mods-available/zz-php-directories.ini /etc/php5/apache2/conf.d/zz-php-directories.ini
ln -sf /usr/share/php/libzend-framework-php/Zend/ …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-compose

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

如何从 Docker 映像中获取不可变标识符(摘要)列表?

我在 dockerhub 中有一个Docker 镜像,这已经构建了几次,因为我需要将 PHP 版本更新为最新版本。我需要使用该图像的先前版本,我认为要走的路是使用不可变标识符(即摘要)。

是有关如何通过摘要提取给定图像的文档,但我找不到从该图像中获取所有摘要的方法。

如果您双击给定的构建,您将获得某些信息,例如构建代码,例如:berpxpunhmqe7bqh6lce5ub但我认为这不是这样的摘要。

我如何找到给定构建的摘要?

digest docker dockerhub

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

使用Active Record的CodeIgniter中的查询中的DATE_FORMAT不起作用

编码器.我在这里遇到一个小问题,无法找到解决方案.我正在使用CI中的Active Record构建查询.这是查询的代码:

 $this->db->select("u.id AS user_id, u.email, p.display_name, p.first_name, p.last_name, s.status_id, s.message");
    $this->db->select("DATE_FORMAT(s.created_at, `Publicado el %d/%m/%Y a las %h:%i %p`) AS created_at", FALSE);

 $this->db->join($this->_table_users . ' u', 'u.id = s.user_id');
 $this->db->join($this->_table_profiles . ' p', 'p.user_id = u.id');

 $this->db->where_in('user_id', $str);
 $this->db->where('deleted', 0);

 $this->db->from($this->_table . ' s');

 $this->db->order_by('s.created_at', 'desc');
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:

错误号码:1054

未知列'Publicado el%d /%m /%Y a las%h:%i%p'在'字段列表'中

选择u.idAS user_id , u. email,p.display_name,p.first_name, p.last_name,s.status_id …

mysql activerecord codeigniter codeigniter-2

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

未定义的索引"顺序",映射错误?

我的ManyToMany关系定义如下:

OrderHasMedia.php

/**
 * @ORM\Entity
 * @ORM\Table(name="order_has_media__media")
 */
class OrderHasMedia {

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="PL\OrderBundle\Entity\Order", inversedBy="order_document", cascade={"all"})
     */
    protected $order;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media", inversedBy="order_document", cascade={"all"})
     */
    protected $media;

}
Run Code Online (Sandbox Code Playgroud)

Order.php

/**
 * @ORM\Entity
 * @ORM\Table(name="tb_order")
 * @Gedmo\Loggable
 */
class Order {

    /**
     * @ORM\OneToMany(targetEntity="PL\OrderBundle\Entity\OrderHasMedia", mappedBy="order" , cascade={"all"})
     */
    protected $order_document;

}
Run Code Online (Sandbox Code Playgroud)

Media.php

class Media extends BaseMedia {

    /**
     * @var Collection
     * @ORM\OneToMany(targetEntity="PL\OrderBundle\Entity\OrderHasMedia", mappedBy="media", cascade={"all"})
     *
     */
    protected $order_document;

}
Run Code Online (Sandbox Code Playgroud)

如果我尝试添加新订单,我会收到此错误:

ContextErrorException:注意:未定义指数:ID在/var/www/html/apps/portal_de_logistica/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php线685

in /var/www/html/apps/portal_de_logistica/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line …
Run Code Online (Sandbox Code Playgroud)

php annotations symfony doctrine-orm sonata-admin

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

用 Doctrine 查询语言写“NOT IN”

我有两张桌子company(id, ...)company_has_wtax(company_id, ....). 我需要获取所有不在company_has_wtax表格中的公司。在原始 SQL 中应该是这样的:

SELECT id FROM company LEFT JOIN (company_has_wtax) 
                       ON company.id = company_has_wtax.company_id
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在 DQL for Doctrine 上构建它,有什么帮助吗?

将方法添加到存储库并从控制器调用它

这是我在@Javad 回答离开后制作的代码:

public function findCompanyByDocument() {
    $q2 = $this->createQueryBuilder('ApprovalBundle:CompanyHasWtax c2');

    $query = $this->createQueryBuilder('c')
            ->leftJoin('c.CompanyHasWtax', 'chw')
            ->where($query->expr()->notIn('c.id', $q2->select('c2.company')->getDQL())
    );

    echo $query->getQuery()->getSQL();
    // return $query->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud)

这就是我在控制器中调用它的方式:

$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('RegisterCompanyBundle:Company')->findCompanyByDocument();
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

ContextErrorException:注意:未定义的变量:在 /var/www/html/kraken/src/Company/RegisterCompanyBundle/Entity/Repository/CompanyRepository.php 第 40 行中查询

第 40 行在哪里->where($query->expr()->notIn('c.id', $q2->select('c2.company')->getDQL())

这是实体:

Company.php

class Company {

    /**
     * @ORM\Id …
Run Code Online (Sandbox Code Playgroud)

php doctrine symfony doctrine-orm

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