我正在玩这个非常基础的课程,以了解有关正则表达式的更多信息.我想要实现的是从testview文件中获取内容,在{{EACH slides}}和{{#EACH}}之间准确抓取字符串.现在在类中出现的正则表达式就是这样,加上开始标记中的变量名.然后我想使用该字符串用正确的变量循环它并将其放回原位.
但是当我在视图中使用2个EACH循环而不是1时,它会严重失败.preg_replace_callback()将匹配第一个开始标记和第二个循环的最后一个结束标记,并给出如下字符串:
"htmlbalalbal {{#EACH}} more htmlblabla {{EACH newsitems}} htmlblalblabla"
Run Code Online (Sandbox Code Playgroud)
从:
<div class="rows-container">
{{each slides}}
<div class="row flex-wrap" data-id="{{id}}">
</div>
{{#each}}
</div>
<div class="rows-container">
{{each blogposts}}
<div class="row flex-wrap" data-id="{{id}}">
</div>
{{#each}}
Run Code Online (Sandbox Code Playgroud)
我一直在尝试改变正则表达式一段时间了,我开始看到越来越多的逻辑......但我还没有解决我的问题.是否有可能走这条路?或者我是否需要另一种解决方案来扫描我的测试文件中的多个EACH循环?我可能很快会使用一些框架,但是当我在周末感到无聊时,我喜欢这样做...
class Aclass{
private $each = '~\{\{each ([^{]*)\}\}([^*]*)\{\{\#each\}\}~i';
private $current_file_content = "";
private $testviews = ['/testview.php'];
private $views;
function __construct($views){
$this->views = $views; //not in use
$this->start();
}
private function start(){
foreach($this->testviews as $file){
$this->current_file_content = file_get_contents(ROOT.$file);
$this->scan_each();
}
}
private function scan_each(){
$result = preg_replace_callback($this->each, [$this, '_each'], …Run Code Online (Sandbox Code Playgroud) 我对 laravel 还很陌生,到目前为止,我真的很喜欢 eloquent 和 querybuilder,但是一旦查询变得更加复杂,我的头就开始受伤了……我在很长一段时间后刚刚完成了 2 个工作示例,也许你们可以提供帮助我优化一下。我先举个例子,然后说(缺点)优点
所以首先是 DB::select... 老实说,我认为它比第二个示例更具可读性。
$shared_slugs = Magic::in_query($this->shared_slugs);
$items = DB::select("
SELECT * FROM f_admin_items
WHERE
active = 1
AND (
slug IN $shared_slugs
OR
:treshhold <= :urank AND id IN (SELECT admin_item_id FROM f_user_access WHERE user_id = :uid)
OR
:treshhold > :urank AND `rank` >= :urank
)
ORDER BY `order` ASC
", [
'treshhold' => $this->threshold_rank,
'urank' => $user_rank,
'uid' => $user_id
]);
Run Code Online (Sandbox Code Playgroud)
总体而言,使用命名参数绑定非常有效。基本上菜单项必须始终处于活动状态,加上 (1 OR 2 OR 3 )。例如,仪表板被接受为共享 slug。否则会有一些排名检查。
现在我一直在努力使用 eloquent …
我对 scss 有点陌生,我的行容器中的行有这种基本样式。
.rows-container{
border-bottom:2px ridge grey;
}
.row{
height:30px;width:100%;
&:hover div{
background-color:lightgrey;
}
&:nth-child(odd){
background: white;
}
&:nth-child(even){
background: #e0e0e0;
}
}
Run Code Online (Sandbox Code Playgroud)
使用以下 html 非常直接:我遗漏了一些不重要的 html。
<div class="rows-container">
<div class="row></div> //white
<div class="row></div> //grey
<div class="row></div> //white
<div class="row></div> //grey etc...
</div>
Run Code Online (Sandbox Code Playgroud)
但现在我添加了子行
<div class="rows-container">
{{each rows}}
<div class="row"></div> //parent row
{{each childs}}
<div class="subitem"></div> //several rows from the same table which have a parent_id connected to the current row.
{{#each}}
{{#each}}
</div>
Run Code Online (Sandbox Code Playgroud)
我打算在点击时切换子项目。但是当没有子项可见时(子项有自己的颜色),'.rows' 奇数/偶数就搞砸了。现在我认为这是因为 nth-child 奇数/偶数是在容器中的所有行/子项上计算的,而不仅仅是 .row(s)。有没有办法对 .rows …
在某些索引上,我有过滤结果的选择框,其中 1 个按年份过滤。但此选择框只需要相关表中存在的年份。在网上做了一些研究后,我想出了这个:
public function getAvailableYears(string $column)
{
$years = $this->model->selectRaw("substr({$column},1,4) as year")
->distinct('year')
->pluck('year', 'year')
->toArray();
return ['' => 'All'] + $years;
}
Run Code Online (Sandbox Code Playgroud)
这完美地生成了一个准备插入到 Form::select() 中的数组
我想知道是否有更好的方法来做到这一点。它似乎工作正常,因为时间戳总是以年份开始,但我不确定性能或将来可能遇到的其他问题。任何专家的见解都会很棒。
css ×1
eloquent ×1
laravel ×1
laravel-5 ×1
laravel-5.3 ×1
mysql ×1
php ×1
preg-replace ×1
regex ×1
sass ×1