CakePHP:formatResults()和combine()

时间:2017-01-31 19:18:02

标签: cakephp cakephp-3.0

假设我有 $categories = $this->Pages->Categories->find('active') ->select(['title', 'slug', 'page_count']) ->order(['title' => 'ASC']) ->cache('widget_categories') ->toArray();

slug

现在,我希望 foreach ($categories as $k => $category) { $categories[$category->slug] = $category; unset($categories[$k]); } 字段是数组键。

现在我使用(可怕的)循环:

$categories

########## DEBUG ########## [ 'first-page-category' => object(MeCms\Model\Entity\PagesCategory) { 'title' => 'First page category', 'slug' => 'first-page-category', 'page_count' => (int) 1, '[new]' => false, '[accessible]' => [ '*' => true ], '[dirty]' => [], '[original]' => [], '[virtual]' => [], '[errors]' => [], '[invalid]' => [], '[repository]' => 'MeCms.Categories' }, 'sub-sub-page-category' => object(MeCms\Model\Entity\PagesCategory) { 'title' => 'Sub sub page category', 'slug' => 'sub-sub-page-category', 'page_count' => (int) 2, '[new]' => false, '[accessible]' => [ '*' => true ], '[dirty]' => [], '[original]' => [], '[virtual]' => [], '[errors]' => [], '[invalid]' => [], '[repository]' => 'MeCms.Categories' } ] ########################### 的调试示例:

Cache::read()

这会产生两个问题:

  • 这是一种可怕的方法;
  • 在更改数组键之前缓存数据,然后每次都必须执行相同的循环。

一种可能的解决方案是使用Cache::write()$categories = Cache::read('widget_categories'); if (empty($categories)) { //Find... //Loop for changing keys... Cache::write('widget_categories', $categories); } 。例如:

formatResults()

在我看来,最好的解决方案是将combine() $categories = $this->Pages->Categories->find('active') ->select(['title', 'slug', 'page_count']) ->order(['title' => 'ASC']) ->formatResults(function ($results) { return $results->combine('slug', function ($row) { return $row; }); }) ->cache('widget_categories') ->toArray(); 方法结合使用。例如:

import os
import sys
import selenium
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

browser = webdriver.Firefox()
type(browser)
Get_webpage=browser.get('https://accounts.google.com/ServiceLogin?sacu=1&scc=1&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&hl=en&service=mail#identifier')

user_name = browser.find_element_by_id('Email')
user_name.send_keys("username")#Enter your username

time.sleep(2)

next = browser.find_element_by_id('next')
next.submit()

time.sleep(5)

password = browser.find_element_by_id('Passwd')
password.send_keys("password")#enter your password
password.submit()

time.sleep(5)
compose = browser.find_element_by_xpath("//div[@role='button']")
compose.click()

time.sleep(5)
Attach_file = browser.find_element_by_xpath("//div[@role='button']")

这是对的吗?是否有更简单的方法和/或使代码更具可读性?

感谢。

0 个答案:

没有答案