免责声明:我是Zend的完全菜鸟.
我正在评估Zend Framework 2的工作,并尝试将其配置为使用ZfTwig进行模板化.(见这里:https://github.com/mtymek/ZfTwig)
我完成Step 3了配置确定,但我无法弄明白Step 4.
我尝试将以下内容放入application.config,但没有好处.
我应该把它放在哪里?
return array(
'di' => array(
'instance' => array(
// setup other stuff...
// ...
// setup view script resolvers - very similar to configuration
// from ZendSkeletonApplication
'Zend\View\Resolver\AggregateResolver' => array(
'injections' => array(
'Zend\View\Resolver\TemplateMapResolver',
'ZfTwig\TemplatePathStack',
),
),
'Zend\View\Resolver\TemplateMapResolver' => array(
'parameters' => array(
'map' => array(
'layout/layout' => __DIR__ . '/../view/layout/layout.twig',
),
),
),
'ZfTwig\TemplatePathStack' => array( …Run Code Online (Sandbox Code Playgroud) 我正在尝试从route/admin重定向到/ admin/post/list.
我设置了从/ admin到IndexController :: indexAction()的路由
然后我像这样做了控制器
class IndexController extends AbstractActionController
{
public function indexAction()
{
$this->redirect()->toRoute('postList');
}
}
Run Code Online (Sandbox Code Playgroud)
它运行良好,但ZF2需要制作模板index/index.phtml.
如何在没有空模板的情况下更好地重定向?
Zend Framework 2声称具有"随意使用"设计,允许您轻松使用其任何模块而无需承诺完整堆栈.我需要一个好的数据库访问层,从网上的文档和推荐我喜欢Zend\Db的外观.我已将Zend/Db文件夹放在我的/ lib目录中,但是我无法让PHP识别Zend\Db\Adapter\Adapter类.当我尝试使用它时,我不断收到致命错误:
致命错误:第6行/home/username/public_html/test.php中找不到类'Zend\Db\Adapter\Adapter'
我试过在我的.htaccess中设置ZF2_PATH:
SetEnv ZF2_PATH /home/username/public_html/lib/Zend
我已经尝试在我的代码中设置包含路径:
set_include_path( $_SERVER['DOCUMENT_ROOT'] . '/lib' . PATH_SEPARATOR . get_include_path() );
我已经尝试显式加载和实例化Zend\Loader:
require_once 'lib/Zend/Loader/StandardAutoloader.php';
$zendLoader = new Zend\Loader\StandardAutoloader();
$zendLoader->register();
Run Code Online (Sandbox Code Playgroud)
这些都没有任何影响.我试图明确要求的Zend/DB /适配器/ Adapter.php,并没有解决我看到的错误,但我只是得到了同样的错误了它的一个依赖,所以这不是一个可行的解决方案.
我在这做错了什么?ZF2是不是真的设计用于这种模块化使用,还是我错过了什么?
编辑:我通过编写自己的自动加载功能来实现这一点:
function autoloader($class) {
$path = explode('\\', $class);
foreach ($path as $p) {
$cp .= DIRECTORY_SEPARATOR . $p;
}
include __DIR__ . '/lib/' . $cp . '.php';
}
spl_autoload_register(autoloader);
Run Code Online (Sandbox Code Playgroud)
这种有意义 - 很明显,如果我不使用框架的其余部分DB模块,我不能指望框架为我做自动装填 - 除了我仍然不明白为什么手动装载的Zend \装载机没有解决问题.是不是处理自动加载Zend\Loader的问题?无论如何,我现在有一个可行的解决方案,但如果有更好的解决方案,我很乐意听到它.
我将我的zend项目从Apache移到了IIS 7并设置了URL Rewrite.主页显示很好,但css和javascript没有加载.
这是我的重写脚本
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<defaultDocument>
<files>
<clear />
<add value="index.php" />
</files>
</defaultDocument>
<rewrite>
<rules>
<rule name="Imported Rule 1" stopProcessing="true">
<match url="^.*$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
</conditions>
<action type="Rewrite" url="public/index.php" />
</rule>
<rule name="Imported Rule 1-1" stopProcessing="true">
<match url="\.(js|ico|txt|gif|jpg|png|css)$" ignoreCase="false" negate="true" />
<action type="Rewrite" url="public/index.php" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
这是原始的mod_rewrite规则
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ …Run Code Online (Sandbox Code Playgroud) 我真的很喜欢使用,contains?因为它非常简洁易读。我想看看一个集合是否包含具有与示例相同的键和值对的映射,该示例还具有其他键值对。我很确定contains?不会在这里工作。有替代方案吗?也许我必须写一篇(我终于进入了心态!)。例如,如果我有
(def some-set #{{:foo "bar" :beep "boop"}{:foo "bar"} {:foo "bar" :hi "there"}})
Run Code Online (Sandbox Code Playgroud)
这将是一个快速的方法来知道是否有任何地图匹配{:foo "bar" :one "two"}上:foo "bar"?
为什么
(defn tester []
(let [bar #{"a" "b" "c"}]
(+ 1 1)
(map println bar)))
Run Code Online (Sandbox Code Playgroud)
打印
a
b
c
Run Code Online (Sandbox Code Playgroud)
到 emacs cider repl,但不是
(defn tester []
(let [bar #{"a" "b" "c"}]
(map println bar)
(+ 1 1)))
Run Code Online (Sandbox Code Playgroud) “Clojure 形而上学将身份解释为我们人类强加于一个过程随时间产生的一系列不变价值的东西”。
如果这是真的,如果身份环绕所有这些状态,那么我应该能够做这样的事情。
user=> (def wow (atom 1))
#'user/wow
user=> (swap! wow (fn [cur] "You say 'Hello'."))
"You say 'Hello'."
user=> (swap! wow (fn [cur] "I say 'Goodbye'."))
"I say 'Goodbye'."
user=> (swap! wow (fn [cur] "Hello, hello!"))
"Hello, hello!"
; Can I do this?
user=> (get-old-atom-state wow 0)
1
(get-old-atom-state wow 1)
"You say 'Hello'"
Run Code Online (Sandbox Code Playgroud)
是这样吗?或者,如果不使用,Clojure 实际上是否会 GC 旧值?
假设我有这样的数据结构:
[[{:name "bob" :favorite-color "green"}{:name "tim" :favorite-color "blue"}]
[{:name "eric" :favorite-color "orange"}{:name "jim" :favorite-color "purple"}]
[{:name "andy" :favorite-color "green"}{:name "tom" :favorite-color "blue"}]]
Run Code Online (Sandbox Code Playgroud)
和这样的数组:
["green" "purple"]
Run Code Online (Sandbox Code Playgroud)
我将如何传递我的数据结构并为喜欢我数组中颜色的人增加所有映射,并使用新的键值对 of :likes-my-colors "yes"?
结果将是:
[[{:name "bob" :favorite-color "green" :likes-my-colors "yes"}{:name "tim" :favorite-color "blue"}]
[{:name "eric" :favorite-color "orange"}{:name "jim" :favorite-color "purple" :likes-my-colors "yes"}]
[{:name "andy" :favorite-color "green" :likes-my-colors "yes"}{:name "tom" :favorite-color "blue"}]]
Run Code Online (Sandbox Code Playgroud)
(我故意将值yes设为一串而不是true因为这更接近我想要弄清楚的)。
我尝试了循环和postwalk递归,但无法弄清楚如何通过后续递归来改变地图。我不会在这里粘贴我可怕的尝试,因为我猜有比 recur 更好的方法来做到这一点。但是,postwalk它的优势在于能够处理更多嵌套的数据结构,这很可能就是这种情况。所以也许 recur withpostwalk是要走的路。
我正在使用 ClojureScript 和 Reagent 将应用程序状态存储在一个原子中......随着事情的发生,我需要不断更新该原子中的应用程序状态。应用程序状态在单个用户会话中反复重置......每次重置后都会建立和修改它。在本例中,应用程序状态根据数组进行修改。我的代码需要遍历数组的元素并修改所有满足条件的映射。最终,该结构用于向 Hiccup …
为了建立一个数据结构,我发现自己做了很多事情,比如:
(let [foo (atom [])]
(do
(swap! foo conj {:foo "bar"})
(swap! foo conj {:foo "baz"}))
@foo)
=> [{:foo "bar"} {:foo "baz"}]
Run Code Online (Sandbox Code Playgroud)
这是一种反模式吗?我使用了很多原子。
我正在尝试编写一段 Clojure 代码来计算前 200 个整数的总和。我试图作为输出得到的答案是 20100。这是我最接近的尝试。
(reduce + (range 200))
Run Code Online (Sandbox Code Playgroud)
上面的代码输出:19900。
有人可以解释我在这里出错的地方以及如何解决这个问题吗?