我想问一个关于新的和大规模的web项目的javascript要求的问题.我们将在项目中使用大量的javascript,ajax请求,jquery,json对象和jquery插件.我们计划在服务器端使用php类和ini文件将全局变量和大量默认值存储在全局站点配置文件中.
但是我们需要使用javascript -jquery在客户端读取,使用并有时覆盖一些变量和配置值.
这个基于javascript的配置文件必须具有以下属性;
此外,我们可以在服务器端完全生成此文件或生成静态.js文件,并在PHP请求之后,设置一些特定于用户页面或特定于语言的值,而不是必须放置(覆盖)此服务器端生成的一些Js对象中的值.
这个解决方案的最佳实践是什么?有什么建议?
在我的登录PHP文件中,我有这些
$passwordInput = password_hash($passInput, PASSWORD_BCRYPT);
$passwordVerify = password_verify($userInput, $passwordInput);
Run Code Online (Sandbox Code Playgroud)
在我的Register PHP文件中,我有这个.
$passwordSign = password_hash($passSign, PASSWORD_BCRYPT);
Run Code Online (Sandbox Code Playgroud)
现在,基本上我是这样做的,它哈希密码并在注册时将自己插入数据库.它做了什么.
但是,它无法验证它.两个结果都给出了两个不同的哈希,我不知道我可能做错了什么.我也试过让它再次哈希输入并检查数据库中的password_hash,但这不起作用..
使用这些的正确方法是什么?
(另外,$ passSign和$ userInput是输入字段,它确实获得用户名/密码)
今天我更新了我的项目,我得到了这个警告:
不推荐使用:ServiceManagerAwareInterface已弃用,将在3.0版中与ServiceManagerAwareInitializer一起删除.请更新您的类X以删除实现,并开始通过工厂注入您的依赖项
我有一些Base实现ServiceManagerAwareInterface扩展这些基类的多个类的主类.
那么为每个类创建额外的工厂类是一个好习惯吗?或者最好为每个模块使用1个AbstractFactory并在那里启动类?
使用AbstractFactory影响性能的剂量?
什么是在许多类中注入单个(或2个)共享依赖项的最佳实践?
更新:即使我接受了@AlexP的答案,但我对提供依赖项抛出构造函数有一些担忧.想象一下这个场景:我有一个带有几个动作的控制器,以免ActionA需要ServiceZ和ActionB需要ServiceY和ServiceX,而ServiceX也依赖于ServiceM和ServiceN.现在,每次我调用ActionA时我的控制器都启动了所有这些服务,但ActionA只需要1个服务,我的控制器加载了5个服务....这是一个好习惯吗?这是正确的做法吗?这会不会有糟糕的表现,因为在每次请求服务时都会发起我们在该请求期间根本不会使用的服务?
现在我允许每个服务/控制器利用其自身的需求和负载护理服务时,它需要它们.
这样我就不必启动我不会使用的多个服务,而且我不需要知道服务依赖项来使用它们.我知道这不是最佳实践,但代码很干净,我宁愿牺牲"最佳实践"来获得更好的表现.
感谢任何人对此的意见.
我一直在研究Symfony 2以及Zend Framework 2的新测试版,我看到了很多相似之处.两者似乎都非常关注Separation of Concerns,看起来他们都有能力添加完全打包的"模块"和相应的MVC组件.
我对这两个框架都不熟悉,以至于我可以为我的下一个项目找到两种方式.两个框架之间是否存在重要差异,这些差异应该有助于指导我在两者之间进行选择的决策?
试图围绕Zend Framework 2.0的新概念.
我正在尝试连接到数据库,并在控制器或模型中获取该连接.没什么好看的,只是纯粹的连接来运行查询.
所以这是我目前的代码:
//module.config.php
return array(
'db' => array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=DBNAME;host=HOSTNAME,
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
),
'username' => 'USERNAME',
'password' => 'PASSWORD',
),
'service_manager' => array(
'factories' => array(
'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory',
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
),
),
);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有以下 Doctrine 2 STI 车辆实体,该实体有两个名为“汽车”和“自行车”的子类,需要按车辆类型对车辆表中的项目进行计数。(例如;表格摘要:3 辆汽车、5 辆自行车..)
/**
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"V" = "Vehicle", "C" = "CarEntity", "B" = "BikeEntity"})
* @ORM\Table(name="vehicles", uniqueConstraints={@ORM\UniqueConstraint(name="discr_type_name",columns={"type","name"})})
*/
class Vehicle {
...
}
Run Code Online (Sandbox Code Playgroud)
因此,我尝试执行以下 DQL 查询,但没有一个起作用:
SELECT v, TYPE(v) as vtype, count(v.id) as cnt FROM Vehicle v GROUP BY TYPE(v);
SELECT v, count(v.id) as cnt, TYPE(v) as vtype FROM Vehicle v GROUP BY vtype;
SELECT v, count(v.id) as cnt, TYPE(v) as vtype FROM Vehicle v GROUP BY TYPE(vtype);
Run Code Online (Sandbox Code Playgroud)
查询异常: …
我是zend框架2和Web应用程序编程的新手.在我的应用程序中,我想有一个按钮,它触发一个改变数据库内容的函数,并返回一个String,我可以用它来更新网站的可见内容.因为我不想在点击按钮时重新加载网站,我想使用ajax来做这件事.在阅读了几个ajax教程之后,我想到解决方案看起来很简单:
HTML部分:
<head>
<script type="text/javascript">
function myFunction() {
var xmlhttp = new XMLHttpRequest();
// I am working with Chrome
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
var text = xmlhttp.responseText;
document.getElementById("text_paragraph").innerHTML =
text;
}
};
xmlhttp.open("GET", "function.php", true);
xmlhttp.send();
}
</script>
</head>
<body>
......
<button id="function_button" onClick="myFunction()">Click</button>
<p id = "text_paragraph">Initial text"</p>
......
</body>
Run Code Online (Sandbox Code Playgroud)
使用.php文件function.php(开头,我只想让它返回一个文本值):
<?php
echo "Text triggered by the button click";
?>
Run Code Online (Sandbox Code Playgroud)
当我尝试测试按钮时,没有任何反应.显然,xmlhttp.status是404并且找不到function.php文件.我想,无论是我放置function.php文件的位置(它与.phtml相同的文件夹 - 网站的视图文件)还是我在xmlhttp.open中使用的url - 函数都是错误的.你能告诉我如何正确使用zf2中的ajax吗?感谢您的时间,非常感谢每一个答案.
是否可以在Zend Framework 2中的Select,Update或Delete查询对象中使用命名参数?例如
$myValue = 'FooBar';
$sql = new Zend\Db\Sql\Sql($adapter);
$select = $sql->select('my_table')
->where('my_column = :my_value')
->setParameter('my_value', $myValue);
Run Code Online (Sandbox Code Playgroud) 我正在使用Zend Framework 2开发一个系统,并config_cache_enabled在application.config.php关闭时关闭密钥收到错误:
致命错误:在/home/user/www/myProject.com/data/cache/module-config-cache.app_config.php在线调用未定义的方法set_state Closure :: __()185.
搜索得更好我发现不建议使用闭包,Module.php因为这是导致配置缓存中出现此错误的原因,考虑到这一点我读了一些建议用工厂替换闭包的帖子.
这就是我做的,我创建了一个工厂,并在工厂取代了TableGateway中的DI Module.php并且工作得很好,我的问题是我不知道我的方式是否正常.
谁能告诉我这是否是解决问题的正确方法?
application.config.php - 之前:
'Admin\Model\PedidosTable' => function($sm) {
$tableGateway = $sm->get('PedidosTableGateway');
$table = new PedidosTable($tableGateway);
return $table;
},
'PedidosTableGateway' => function($sm) {
$dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
$resultSetPrototype = new ResultSet();
$resultSetPrototype->setArrayObjectPrototype(new Pedidos());
return new TableGateway('pedidos', $dbAdapter, null, $resultSetPrototype);
},
Run Code Online (Sandbox Code Playgroud)
application.config.php - 之后:
'factories' => array(
'PedidosTable' => 'Admin\Service\PedidosTableFactory',
),
'aliases' => array(
'Admin\Model\PedidosTable' => 'PedidosTable',
),
Run Code Online (Sandbox Code Playgroud)
TableFactory:
namespace Admin\Service;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use …Run Code Online (Sandbox Code Playgroud) 对于那些已经开始玩zend表达的人来说,它需要知道zend框架2吗?我是否必须学习/了解zf2才能使用表达?还是他们做了足够的改变,学习zf2会毫无意义/混乱?
沿着这些相同的行,除了zend-expressive.readthedocs.org页面,任何人都可以推荐一些好的教程/ 演练来开始吗?
php ×6
javascript ×2
ajax ×1
doctrine-orm ×1
dql ×1
jquery ×1
json ×1
middleware ×1
orm ×1
sql ×1
symfony ×1