标签: symfony4

axios 中的动态主机

如何在 中创建动态主机axios

例子:

 const host = location.hostname;
 // axios.defaults.baseURL = 'http://hastore.local';
 axios.defaults.baseURL = host;
 axios.defaults.port = 8080;
 axios.get('api/categories')
 .then((res) => {
      this.categories = res.data;
      console.log(res);
 })
 .catch((err) => {
      console.warn('error during http call', err);
 });
Run Code Online (Sandbox Code Playgroud)

字符串axios.defaults.baseURL = 'http://hastore.local';不适合,因为在生产中不起作用。

字符串const host = location.hostname;也不是解决方案,因为我得到了不正确的端口和重复的主机。

在此输入图像描述

目标是根据环境找到合适的主机。我读了很多关于这个问题的文章,但没有找到解决方案。感谢帮助!

  • axios版本:例如:v0.16.2
  • 环境:例如:node v8.9.4、chrome 64.0.3282.119、Ubuntu 16.04
  • 交响乐4.0.4
  • Vue.js 2.4.2
  • vue-axios 2.0.2

symfony vue.js axios symfony4

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

在 Symfony4 中注册自定义 Doctrine 类型

所以我有这个自定义的 Dotrine 类型

命名空间 App\Doctrine\Types;

使用 Doctrine\DBAL\Platforms\AbstractPlatform;使用 Doctrine\DBAL\Types\TextType;

class MyType extends TextType
{
   private $prefix='';

   public function getName()
   {
      return 'my_type';
   }
   public function setPrefix(string $prefix)
   {
      $this->prefix=$prefix;
   }
}
Run Code Online (Sandbox Code Playgroud)

我在 config/packages/doctrine.yml 中注册:

doctrine:
    dbal:
        types:
            my_type: App\Doctrine\Types\MyType
Run Code Online (Sandbox Code Playgroud)

然后在 Kernel boot() 中我尝试向此类型添加一些参数:

public function boot() {
   parent::boot();

   $myType=Type::getType('my_type');
   $myType->setPrefix('abc');
}
Run Code Online (Sandbox Code Playgroud)

我第一次运行该应用程序时,效果非常好。前缀是为类型设置的,可以在整个应用程序中使用。但是,第二次我遇到异常:

请求未知的列类型“加密文本”。您使用的任何 Doctrine 类型都必须使用 \Doctrine\DBAL\Types\Type::addType() 注册。您可以使用 \Doctrine\DBAL\Types\Type::getTypesMap() 获取所有已知类型的列表。如果在数据库自省期间发生此错误,那么您可能忘记了为 Doctrine 类型注册所有数据库类型。使用 AbstractPlatform#registerDoctrineTypeMapping() 或让您的自定义类型实现 Type#getMappedDatabaseTypes()。如果类型名称为空,则可能是缓存有问题或忘记了一些映射信息。

然后我将 boot() 更改为:

    public function boot() {
       parent::boot();
       if (!Type::hasType('my_type')) {
           Type::addType('my_type', 'App\Doctrine\Types\MyType');
       }
       $myType=Type::getType('my_type');
       $myType->setPrefix('abc');
   } …
Run Code Online (Sandbox Code Playgroud)

php doctrine symfony doctrine-orm symfony4

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

php bin/console make:包内的实体

我正在使用 symfony 4

我已经为可重用应用程序构建了一个捆绑包,并且我想继续使用 php cli 命令 make:entity。

我如何将它用于我的特定捆绑包的文件夹目标?

谢谢!

php bundle command-line-interface symfony4

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

没有为 Doctrine\ORM\PersistentCollection 类定义实体管理器

我正在使用Symfony 4.1SonataAdminBundle 3.36.

\n\n

当我设置关系字段调用标签时出现此ModelType::class错误ManyToMany

\n\n
\n

没有为类 Doctrine\\ORM\\PersistentCollection 定义实体管理器

\n
\n\n

我也无法使用sonata_type_modelor sonata_type_model_list

\n\n

src/Admin/CategoryAdmin.php

\n\n
namespace App\\Admin;\n\nuse Sonata\\AdminBundle\\Admin\\AbstractAdmin;\nuse Sonata\\AdminBundle\\Datagrid\\ListMapper;\nuse Sonata\\AdminBundle\\Datagrid\\DatagridMapper;\nuse Sonata\\AdminBundle\\Form\\FormMapper;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\TextType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\EmailType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\TextareaType;\nuse Symfony\\Component\\Form\\Extension\\Core\\Type\\CheckboxType;\n\nuse Symfony\\Bridge\\Doctrine\\Form\\Type\\EntityType;\nuse Sonata\\AdminBundle\\Form\\Type\\ModelType;\nuse Sonata\\AdminBundle\\Form\\Type\\ModelListType;\n\n\nclass FactureAdmin extends AbstractAdmin\n{\n    protected $datagridValues = [\n\n        // display the first page (default = 1)\n        '_page' => 1,\n\n        // reverse order (default = 'ASC')\n        '_sort_order' => 'DESC',\n\n        // name of the ordered field (default = the model's id field, …
Run Code Online (Sandbox Code Playgroud)

symfony doctrine-orm sonata-admin symfony4

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

限制 Symfony 4 路由到“dev”环境

我正在使用 Symfony 4.1。我正在尝试创建一个只能从“开发”环境中访问的路由“/dev/import/{file}”。

Symfony 2 的这个答案建议将路由routing_dev.yml添加condition: "request.getScriptName() == '/app_dev.php'"到或添加到您的路由定义。

这两种选择都不起作用。在 Symfony 4 中没有routing_dev.yml,现在是dev\routing_dev.YAML,据我所知只是配置(即你不能在那里创建路由)。必须定义routes.yaml适用于所有环境的路线。

添加路由routes.yaml和应用条件也不起作用,因为我们试图匹配app_dev前端控制器,它已在 Symfony 4 中删除。

根据Symfony 4 文档,路由中的条件仅公开ContextRequest对象,两者(AFAICT)都不包含有关当前环境的任何信息。所以,除非我遗漏了什么,否则其他条件也不起作用。

一种可能的,但(恕我直言)不优雅的解决方案是$_SERVER['APP_ENV'] = 'dev'在控制器中检查它,RouteNotFoundException如果没有则抛出一个。

而不是这样做,我真的希望要么在不在“开发”中时根本不可用路线,要么以某种方式定义路线以测试“开发”环境。

关于如何做到这一点的任何想法?最好使用注释。

php routes symfony symfony4

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

Symfony AutoWire多个服务同类

我正在将大型应用程序升级到4.2

并且$this->get(".....") 不推荐使用控制器内部,而应该使用AutoWire.

我遇到的问题是我有2个服务,实际上是来自同一个类(只是不同的构造函数args).

services.yml

services:
  service.a:
    class: Namespace\MyClass
    arguments: [ "argument1" ]

  service.b:
    class: Namespace\MyClass
    arguments: [ "argument2" ]
Run Code Online (Sandbox Code Playgroud)

控制器:

public function demoAction() {
  $serviceA = $this->get("service.a");
  $serviceB = $this->get("service.b");
}
Run Code Online (Sandbox Code Playgroud)

以及有问题的结果:

public function demoAction(MyClass $serviceA, MyClass $serviceB) {
}
Run Code Online (Sandbox Code Playgroud)

我们可以使用别名来服务定义,例如:

MyClass: '@service.a'
Run Code Online (Sandbox Code Playgroud)

但我不能使用虚拟/假类(没有现有的):

MyPseudClass: '@service.b'
Run Code Online (Sandbox Code Playgroud)

你如何在autowire模式下处理这样的案例?

我可以创建"伪"类,从基础扩展,只是为了获得不同的类名,但这感觉很奇怪.

autowired symfony symfony4

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

Symfony 4:如何安全地“加入”迁移?/ 删除第一个和最后一个之间的迁移?

我最近在调整我的数据库并注意到我在现有的 2 个之上进行了 5 次迁移。所以总共 7 次,m1、m2、...、m7。从这 5 个中,我只想要最新版本。所以我想我可以删除 m3、m4、m5、m6、m7 并再次迁移,这将导致 m3 已经包含我满意的最终版本。现在我以前从未这样做过,想知道最安全的方法是什么?

我正在使用 PHPStorm。我可以手动删除它们(在 PHPStorm 中右键单击然后删除)然后转到命令行并执行php bin/console doctrine:migrations:migrate?或者我需要做php bin/console doctrine:schema:update什么?或者这真的是个坏主意?

php symfony doctrine-orm doctrine-migrations symfony4

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

Symfony 4 Dotenv 转义特殊字符

我使用带有特殊字符的密码,symfony 返回错误“参数格式错误”。

我怎样才能使用这种密码? foo?bar

我尝试使用这样的变量

DATABASE_USER='foo'
DATABASE_PASSWORD='foo?bar'
DATABASE_URL=mysql://${DATABASE_USER}:${DATABASE_PASSWORD}@100.100.100.100:3306/db
Run Code Online (Sandbox Code Playgroud)

但不工作

escaping symfony symfony4 dotenv

6
推荐指数
2
解决办法
4147
查看次数

Symfony 4.4 未知的 inky_to_html 过滤器

我最近将 Symfony 更新到 4.4(从 4.3)并且我的翻译文件不能再自动更新(使用php bin/console tran:up --force)。弹出的错误是:

In body.html.twig line 1:
Unknown "inky_to_html" filter.
Run Code Online (Sandbox Code Playgroud)

有问题的文件是vendor/symfony/twig-bridge/Resources/views/Email/zurb_2/notification/body.html.twig我从未使用过的,我不知道为什么突然包含它。为了摆脱我试图要求twig/inky-extra但需要 ext-xsl-extension 的消息,我真的不想用我不需要的东西来膨胀我的代码只是为了摆脱与树枝扩展相关的错误这也不需要。

我尝试按照此处所述更改翻译界面的版本,但这也没有任何改变。

我想这与我的项目有关,因为我找不到任何类似的问题,但我无法弄清楚,因此感谢您提供任何帮助。

编辑:这是我的 composer.json,它与创建 Symfony 4.3 项目时生成的基本相同,我只更改了版本名称以按照文档中的描述升级并运行composer update.

{
  "type": "project",
  "license": "proprietary",
  "require": {
    "php": "^7.1.3",
    "ext-ctype": "*",
    "ext-iconv": "*",
    "ext-intl": "*",
    "apy/breadcrumbtrail-bundle": "^1.5",
    "craue/config-bundle": "^2.3",
    "easycorp/easy-log-handler": "^1.0",
    "friendsofsymfony/jsrouting-bundle": "^2.4",
    "league/csv": "^9.4",
    "nesbot/carbon": "^2.25",
    "sensio/framework-extra-bundle": "^5.1",
    "sg/datatablesbundle": "^1.1",
    "symfony/apache-pack": "^1.0",
    "symfony/asset": "^4.0",
    "symfony/console": "^4.0",
    "symfony/dotenv": "^4.0",
    "symfony/expression-language": "^4.0",
    "symfony/flex": …
Run Code Online (Sandbox Code Playgroud)

php symfony symfony4

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

尝试从命名空间“Doctrine\Bundle\DoctrineCacheBundle”加载类“DoctrineCacheBundle”

任何人都可以帮助我吗,伙计们?每次运行命令php bin/console server:run时都会出现此错误:

PHP 致命错误:未捕获的 Symfony\Component\Debug\Exception\ClassNotFoundException:尝试从命名空间“Doctrine\Bundle\DoctrineCacheBundle”加载类“DoctrineCacheBundle”。您是否忘记了另一个命名空间的“use”语句?在 C:\Users\XX-2\Desktop\React Projects\test_project\src\Kernel.php:23

symfony symfony4

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