我正在使用Laravel 5,我想知道如何使用Artisan命令(PHP)生成所有预定义方法的RESTful资源控制器.
当我运行时php artisan make:controller LessonsController
,它会创建一个控制器,没有如下所示的方法:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
class LessonsController extends Controller
{
}
Run Code Online (Sandbox Code Playgroud)
我想要创建的是一个完整的Laravel RESTful资源控制器,其中包含以下所有预定义方法:index(), create(), store(), show(), edit(), update()
和destroy()
.
我怎样才能做到这一点?
我正在查看本教程http://asp-umb.neudesic.com/mvc/tutorials/validating-with-a-service-layer--cs,了解如何围绕包装器包装我的验证数据.
我想使用依赖注入.我正在使用ninject 2.0
namespace MvcApplication1.Models
{
public interface IValidationDictionary
{
void AddError(string key, string errorMessage);
bool IsValid { get; }
}
}
Run Code Online (Sandbox Code Playgroud)
//包装
using System.Web.Mvc;
namespace MvcApplication1.Models
{
public class ModelStateWrapper : IValidationDictionary
{
private ModelStateDictionary _modelState;
public ModelStateWrapper(ModelStateDictionary modelState)
{
_modelState = modelState;
}
#region IValidationDictionary Members
public void AddError(string key, string errorMessage)
{
_modelState.AddModelError(key, errorMessage);
}
public bool IsValid
{
get { return _modelState.IsValid; }
}
#endregion
}
}
Run Code Online (Sandbox Code Playgroud)
//控制器
private IProductService _service;
public ProductController()
{ …
Run Code Online (Sandbox Code Playgroud) 似乎每个人都在转向IoC容器.我曾试图"摸清"它一段时间,尽管我不想成为一个在高速公路上走错路的司机,但它仍然没有通过常识测试.让我解释一下,如果我的论点存在缺陷,请纠正/启发我:
我的理解:IoC容器应该在组合不同组件时让您的生活更轻松.这可以通过a)构造函数注入,b)setter注入和c)界面注入来完成.然后以编程方式或在容器读取的文件中"连接"它们.然后按名称召唤组件,然后在需要时手动投射.
我得不到的:
编辑 :( 更好的措辞) 为什么使用一个不是语言惯用的不透明容器,如果组件设计得当(使用IoC模式,松散耦合),你可以用更简洁的方式"连接"应用程序(imho) ?这个"托管代码"如何获得非平凡的功能?(我听过一些关于生命周期管理的提及,但我不一定能理解这比自己动手更好/更快.)
ORIGINAL:为什么要将所有组件存储在一个容器中,以与语言惯用的方式"连接起来",在按名称调用组件时使用相当于"goto labels"的东西,然后通过手动转换失去静态类型语言的许多安全优势,当你通过不执行它获得等效功能时,而是使用现代OO语言给出的所有很酷的抽象功能,例如编程到接口?我的意思是,实际上需要使用组件的部件必须知道它们在任何情况下都在使用它,并且在这里你将使用最自然,惯用的方式进行"连线" - 编程!
我们想使用Unity for IOC.我所看到的是有一个全局静态服务(我们称之为IOCService)的实现,它包含对Unity容器的引用,该容器注册所有接口/类组合,每个类都询问该对象:给我一个实现为Ithis或IThat.
我经常看到这种模式不好的响应,因为它导致从ALL类到IOCService的依赖(而不是Unity容器,因为它只在IOCService内部知道).
但我经常看不到的是:替代方式是什么?
米歇尔
编辑:发现全局静态服务被称为服务定位器,将其添加到标题中.
所以我要说我有这个代码
var builder = new ContainerBuilder();
builder.RegisterInstance(new MyType());
var container = builder.Build();
Run Code Online (Sandbox Code Playgroud)
然后一段时间后,我想更改MyType
所有未来调用的实例container
.
如何使用类型没有NO PARAMETER构造函数的容器注册类型.
实际上我的构造函数接受一个字符串,我通常传入一个表示Path的字符串.
所以当我解决它时会自动创建新类型但是传入一个字符串?
有人在C#写过自己的IOC容器吗?或者绝大多数人使用各种框架,如Spring.每个人的专业和意见是什么?
来自.NET,我已经习惯了Ninject,这是一个简单的小型ioc容器.Java有什么简单轻量的东西吗?
越简越好!
只是试着继续关注IOC原则.
Q1:静态方法 - 是否应将带有静态辅助方法的util类与IOC连接?
例如,如果我有一个带有许多静态方法的HttpUtils类,我应该尝试通过IOC将它传递给其他业务逻辑类吗?
关注这个问题可能是:
Q2:Singletons - 通过Logger.getInstance()类型调用,通常可以访问它的内容.您是否通常将其保留原样,并且不使用IOC将记录器注入需要它的业务类?
问题3:静态类 - 我还没有真正使用过这个概念,但如果你转向基于IOC的方法,那么你是否有任何指导方针可以解决这个问题.
提前致谢.
在任何需要运行时值来构造特定依赖项的地方,Abstract Factory就是解决方案.
我的问题是:为什么很多来源都赞成FactoryInterface而不是FactoryDelegate来实现这种模式?两种解决方案的优缺点是什么?
这是一个了解我的意思的例子
如果您的服务需要具有特定上下文的存储库,则服务构造函数需要工厂来创建或访问其存储库.
对此的常见解决方案是创建这样的RepositoryFactoryInterface.
public IRepositoryFactory {
IRepository Create(ContextInformation context);
}
public class MyService {
private IRepositoryFactory repositoryFactory;
public MyService(IRepositoryFactory repositoryFactory)
{
this.repositoryFactory = repositoryFactory:
}
public void DoSomeService()
{
ContextInformation context = ....;
IRepository repository = this.repositoryFactory.Create(context);
repository.Load(...);
...
repository.Save(...);
}
}
Run Code Online (Sandbox Code Playgroud)
您还需要以某种方式实现IRepositoryFactory接口
public MyEf4RepositoryFactory : IRepositoryFactory
{
IRepository Create(ContextInformation context)
{
return new MyEf4Repository(context);
}
}
Run Code Online (Sandbox Code Playgroud)
...并在应用程序中使用它
public void main()
{
IRepositoryFactory repoFactory = new MyEf4RepositoryFactory();
IService service = new MyService(repoFactory);
service.DoSomeService();
}
Run Code Online (Sandbox Code Playgroud)
-----主流解决方案结束------ …
ioc-container ×10
c# ×4
.net ×2
ninject ×2
autofac ×1
instance ×1
java ×1
laravel-5.2 ×1
modelstate ×1
php ×1
static ×1