环顾四周后我找不到解决方案。仅当通过 Ajax 提交时,我才会收到以下错误。这意味着我事先已经以常规 Symfony 方式提交了表单,没有出现任何问题。
\n\n\n\n\nCSRF 令牌无效。请尝试重新提交表格。
\n
什么有效:
\n\n\n\n\n$form->submit($request->request->get($form->getName(\'user\')));
\n
根据要求,请参阅下面的输出
\n\n\n\n\nvar_dump($request->request->get($form->getName(\'user\')));
\n
array(8) { \n["name"]=> string(9) "fafdffafa" \n["avatar"]=> string(9) "dfafffafa" \n["cityId"]=> string(1) "6" \n["phone"]=> string(14) "33434343434344" \n["email"]=> array(2) { \n ["first"]=> string(22) "myemail@gmail.com" \n ["second"]=> string(22) "myemail@gmail.com" } \n["plainPassword"]=> array(2) { \n ["first"]=> string(8) "senha444" \n ["second"]=> string(8) "senha444" } \n["blogSubs"]=> string(1) "1" \n["_token"]=> string(43) "hLhyoRxVYmJ_FWK0FqXmiiEYZMZ77fDAWvxCZMXCtxw" }\n …Run Code Online (Sandbox Code Playgroud) 我在验证和更新模式时努力让 symfony/doctrine 排除数据库视图。
我首先尝试不进行教条迁移(请参阅此问题),但这没有用。
我发现学说迁移会过滤掉验证/更新中的视图,而且确实如此,因此该步骤似乎适用于迁移。
因此,如果只有一个数据库原则,迁移会很好地工作,但至少可以说,使用多个数据库的设置并不是很干净。
这是一个已知问题,您可以在此链接中看到。不幸的是,当尝试遵循链接中描述的解决方案时,结果很混乱。
即使命令 migrations:update --em=default 将指示设置了正确的数据库,但在生成 migrations:diff --em=default 时,它将与其他数据库混合,同样与 migrates:migrate --em=default 混合,结束在另一个数据库上创建表。
更具体地说,错误是: - 它将按照配置文件中的指示为迁移文件创建单独的目录,但不会创建相应的 em - 它将生成混合两个 em 的 mysql 查询 - 因此它将更新 db
我的设置如下:
配置.yml
imports:
....
- { resource: doctrine_migrations_default.yml }
- { resource: doctrine_migrations_used.yml }
doctrine:
dbal:
default_connection: default
connections:
default:
.....
#schema_filter: "~^(?!view).*$~"
schema_filter: ~^(?!view_)~
used:
......
orm:
auto_generate_proxy_classes: '%kernel.debug%'
default_entity_manager: default
entity_managers:
default:
naming_strategy: doctrine.orm.naming_strategy.underscore
connection: default
auto_mapping: true
mappings:
AppBundle: ~
used:
naming_strategy: doctrine.orm.naming_strategy.underscore …Run Code Online (Sandbox Code Playgroud) 我正在从扩展 mysql 转换为 PDO,在阅读了各位专家在 Stack\xc2\xa0Overflow 和其他地方的所有内容后,我还有一些剩余的问题。我想出了以下方法来解决典型查询的SQL 注入问题。我只是想知道这是否足够,或者在我将其复制到我的所有应用程序之前,我对白名单的处理可能有点过头了。
\n我不清楚我是否正确地加入了白名单,即我是否也应该以某种方式逃脱。
\n另外,我不确定是否应该为每个查询将 setAttribute 模拟为 false,或者只为脚本设置一次。
\n$link = new PDO("mysql:host=$hostname;dbname=$database;charset=utf8", $username, $password);\n\n$link->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);\n\n$arr_i = $arr_k = \'\';\n$m_act = $v_act = \'Y\';\n$table = array(\'prices\', \'versions\', \'models\');\n$allowedTables = array(\'prices\', \'versions\', \'models\');\n$field = array(\'model_id\', \'version_id\', \'price\', \'models.active\', \'versions.active\');\n$allowedFields = array(\'model_id\', \'version_id\', \'price\', \'models.active\', \'versions.active\');\n\nif(count(array_diff($field, $allowedFields))==0 AND count(array_diff($table, $allowedTables))==0) {\n\n $sql = "SELECT COUNT(DISTINCT `" . $field[0] . "`) as ctmod FROM `" . $table[0] . "`\n INNER JOIN `" . $table[1] . …Run Code Online (Sandbox Code Playgroud) 我的 IN 子句有一个奇怪的问题
变量 $fuel 来自对此 php 页面的 Ajax 调用。
$fuel = $_REQUEST['fuel'];
var_dump($fuel) = 'gas' ( for instance)
Run Code Online (Sandbox Code Playgroud)
现在,当在发起 Ajax 调用的 php 页面中未选择 $fuel 时,我需要使用以下代码插入 $fuel 的所有可能值:
if($fuel=='none'){
$fuel=array('gas','diesel','hybrid','electric');
$fuel=implode(',',$fuel);
}
Run Code Online (Sandbox Code Playgroud)
这是查询。当值直接来自 Ajax 调用时(例如,当 $fuel = 'gas' 时),它可以正常工作。
但是当我的 IF 子句生成 $fuel 并且 $fuel = 'gas,diesel,hybrid,electric' 时,它给了我一个空集。
SELECT * FROM vprice_range WHERE (power >= $power)
AND (price BETWEEN $low AND $high)
AND (fuel IN ('$fuel'))
AND (mileagemix < $mileage)
AND (emission_co2 < $co2)
AND (trunk >= $trunk)
Run Code Online (Sandbox Code Playgroud)
这可能无关紧要,但请注意,“燃料”字段是一个 ENUM …
我无法让 Symfony 4 在 SPA 设置中正常工作。
具体来说,当我使用 React-router 链接导航时,一切正常。
但是,如果我尝试直接访问任何路由(除了 home ),Symfony 会拦截它,当然,会为找不到路由引发错误。
将 Symfony 放在子域中并将其仅用作 API 的替代方案是不可行的,因为我需要框架提供的所有用户和会话管理工具。
当然,我将需要 Symfony 的所有 API 调用路由到后端。
我正在使用 Symfony 4 的默认目录结构,只在顶层为所有 react/redux 代码添加一个目录 /client。
构建代码放在 /public/build 下。
我还尝试使用以下代码在 /public 上放置一个 .htaccess 文件,但这没有帮助。
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个事件侦听器,它设置一些会话变量,还检查访问者是否在上次访问时设置了某种类型的购物车,并在前端显示其详细信息。
该事件工作正常,直到尝试注入实体管理器,我需要在访问者实体上使用一些 setter/getter。
我也尝试过这个解决方案,但最终遇到了同样的问题,即“给出的字符串”而不是对象。
它产生的错误是:
类型错误:传递给 AppBundle\EventListener\InitializerListener::onKernelRequest() 的参数 2 必须是 Doctrine\ORM\EntityManager 的实例,给出的字符串
这是代码:]
服务.yml
app.initializer_listener:
class: AppBundle\EventListener\InitializerListener
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelRequest }
Run Code Online (Sandbox Code Playgroud)
AppBundle\EventListener\IniatilizerListener
namespace AppBundle\EventListener;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpFoundation\Cookie;
use Symfony\Component\HttpFoundation\Response;
use UsedBundle\Entity\Visitor;
use Doctrine\Common\Persistence\ManagerRegistry;
use Doctrine\ORM\EntityManager;
class InitializerListener
{
private $event;
private $em;
public function onKernelRequest( FilterControllerEvent $event, EntityManager $em )
{
$visitor = new Visitor();
$this->em = $em;
$route = $event->getRequest()->get('_route');
if ($event->isMasterRequest() && '_wdt' !== $route ) { …Run Code Online (Sandbox Code Playgroud) php ×5
symfony ×4
doctrine-orm ×2
mysql ×2
ajax ×1
events ×1
javascript ×1
jquery ×1
pdo ×1
reactjs ×1