来自这个帖子和修复后的东西我在另一个问题/安全问题/问题.
正如你在其他帖子中看到的那样,我正在尝试在监听器中注入安全上下文,但是如果我保持代码完整而没有触摸我得到了这个错误:
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按照这里的说明转换服务,看看 …
我正在对我的代码进行一些测试,但我得到了第一个“停止”,因为我不知道如何继续前进。在我的函数中看到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)
由于记录是在安装程序中创建的,并且它们保留在数据库中,因此测试失败。对此有什么建议吗?你的是怎么解决的?
我需要使用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) /login如果出现以下情况,我需要将所有人重定向到
/路线(app.php或app_dev.php)所以我在我这样做了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) 我正在研究一个基于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) 我的结尾处有以下内容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) 编码器.我在这里遇到一个小问题,无法找到解决方案.我正在使用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.p.display_name,p.first_name,p.last_name,s.status_id …
我的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) 我有两张桌子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) symfony ×5
php ×4
doctrine-orm ×3
docker ×2
activerecord ×1
annotations ×1
codeigniter ×1
digest ×1
dockerfile ×1
dockerhub ×1
doctrine ×1
html ×1
html5 ×1
mysql ×1
security ×1
sonata-admin ×1
symfony-2.4 ×1
testing ×1
unit-testing ×1
wordpress ×1