我目前正在整理一些用于练习的mvc框架,我有一些laravel经验,因此大致基于此。我做了一个路由器,它只是为您设置的网址返回一个指定的视图。
现在,我还制作了控制器,用于拆分URL,并将基本URL后的第一部分用作控制器,第二部分用作操作。这将加载与控制器相对应的文件,并在该文件中加载与操作相对应的方法。
因此,如果url类似于:url.com/users/index,它将加载UsersController.php文件并在该文件中查找index()方法。
现在我想知道控制器和路由器之间的确切区别是什么?它像指定的吗?其中路由器稍微简单一点,并且只对给定的确切网址做出反应,而路由器将其切碎并增加深度?
我目前所拥有的似乎有很多重叠。
我正在寻找有关如何进行非常基本的 php 路由的教程或解释。
例如,当我访问像 mywebsite.com/users 这样的链接时,我想运行路由类的 get 方法来提供数据,就像 laravel 那样。
Route::get('users', function()
{
return 'Users!';
});
Run Code Online (Sandbox Code Playgroud)
有人可以解释如何做到这一点或向我提供更多信息吗?
我知道控制反转容器是如何工作的,并且我知道如何自己创建一个。但我只知道如何通过使用注册和解析方法来做到这一点。
我查看了 Laravel 文档,但我一直试图弄清楚 Laravel 如何基于类型提示来解决依赖关系。该部分缺失的链接在哪里?
当我使用更传统的 IoC 容器来手动解析内容时,我至少必须调用静态方法才能开始。Laravel 似乎不需要这些。
有人可以引导我走向正确的方向或举一个小例子吗?
我已经通过以下方式努力了:
http://code.tutsplus.com/tutorials/dependency-injection-huh--net-26903
作为回顾。也许有人可以建立一个自动解析打字提示的快速示例,或者这真的很复杂吗?
请帮我澄清一些困惑.
Laravel允许你设置redis来与socket.io进行通信:
https://laravel.com/docs/5.4/broadcasting#configuration
据我所知,Redis只是将数据保存在内存中类似于memcached的数据?这允许socket.io等第三方软件获取数据.这真的是websocket行为吗?
我知道你也可以在PHP中做这样的事情:
$address = 'localhost';
$port = 5600;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $address, $port);
Run Code Online (Sandbox Code Playgroud)
他们为什么不选择上面的东西,而不是让你设置Redis?这可能是一个很好的答案,但我没有使用Redis或websockets的那么多经验.
任何有关这方面的信息将不胜感激.
我正在使用matchMedia API来确定javascript中的视口,因此我可以最大程度地减少dom操作的发生。
display: none我没有使用v-ifVue 的指令来确定是否将元素插入DOM,而不是在各处使用。
我已经这样设置了:
resize() {
this.mobile = window.matchMedia('(max-width: 767px)').matches;
this.tablet = window.matchMedia('(max-width: 767px)').matches;
this.desktop = window.matchMedia('(min-width: 992px)').matches;
}
Run Code Online (Sandbox Code Playgroud)
可以使用移动Match媒质查询,但是如何确定平板电脑的尺寸呢?我想知道是否可以在matchMedia查询中合并max-width和min-width值。
我当然可以做这样的事情:
resize() {
this.mobile = window.matchMedia('(max-width: 767px)').matches;
this.desktop = window.matchMedia('(min-width: 992px)').matches;
this.tablet = !this.mobile && !this.desktop;
}
Run Code Online (Sandbox Code Playgroud)
我想知道这是否像这样正确设置。
我遇到一个问题,同步组件 JavaScript 在实际显示之前就已加载。
使用a 导入的组件dynamic-import显示v-if为在需要时加载它们。当它们显示时,它们的 JavaScript 也会被加载。但在 v-if 的情况下,slot不会阻止组件加载其生成的 JavaScript 块并将其附加到 DOM。
下拉组件:
<template>
<li class="dropdown" :class="{ open: visible }">
<div class="heading" @click.stop="toggle">
<span>{{ heading }}</span>
</div>
<div class="slot-content" v-if="visible">
<slot></slot>
</div>
</li>
</template>
Run Code Online (Sandbox Code Playgroud)
组件与google-map插槽中的异步组件的用法:
<dropdown>
<google-map>
<map-marker :data="{{ $marker }}"></map-marker>
</google-map>
</dropdown>
Run Code Online (Sandbox Code Playgroud)
即使槽有一个v-if,组件 JavaScript 仍在加载。奇怪的是,安装的或创建的都没有被解雇。所以看起来除了组件的异步加载之外,一切都遵守正确的规则。
最好我可以使用带有 a 的插槽,v-if并且不触发加载该async组件生成的块。
显然,如果它是异步加载的话,这并不是一个大问题,但即使是 HTTP2 在请求方面也有其局限性。我宁愿在需要时加载它。
我需要根据评论等级来降低颜色。我希望像这样在Vue.js中完成一些工作:
<div class="review" :style="reviewColor(hotel.average)">
Run Code Online (Sandbox Code Playgroud)
在我的方法中,我有这样的东西:
reviewColor() {
return 'green';
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这没有给我提供'green'课程。我希望在该方法中进行颜色计算。
如果等级小于7,则必须是特定的颜色,如果介于7到8之间并且高于8。
I need these calculations in a clean matter. Is there any alternative?
I can't inline it because I have 2 elements that need to respond to a class.
我有一个房间对象数组,我目前正在根据它们的room_rate_type_id属性从数组中删除重复的对象:
const rooms = [{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 200
},
{
room_rate_type_id: 202,
price: 189
},
{
room_rate_type_id: 190,
price: 200
}
];
const newRooms = rooms.filter((room, index, array) => {
const roomRateTypeIds = rooms.map(room => room.room_rate_type_id);
// Returns the first index found.
return roomRateTypeIds.indexOf(room.room_rate_type_id) === index;
});
console.log(newRooms);Run Code Online (Sandbox Code Playgroud)
但是,我还需要确保对象不仅在room_rate_type_id匹配时而且在价格时才会被删除。
我可以理解过滤器功能在我给定的示例中是如何工作的,但我不确定如何干净地检查价格,最好是在 ES6 中。
javascript ×4
php ×4
laravel ×3
vue.js ×3
url-routing ×2
vuejs2 ×2
arrays ×1
controller ×1
ecmascript-6 ×1
filter ×1
laravel-5 ×1
matchmedia ×1
node.js ×1
sockets ×1
url ×1
webpack ×1