首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Laravel 5.5资源控制器及可靠性注入

Laravel 5.5资源控制器及可靠性注入
EN

Stack Overflow用户
提问于 2017-12-03 13:03:23
回答 3查看 2.8K关注 0票数 1

我正在处理一份Laravel5.5的申请。当我使用php artisan make:model SomeModel -mr时,它创建了模型、迁移和资源控制器。

我注意到在默认情况下,有些方法只有一个参数:模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function show(SomeModel $someModel)
{
    ...
}

如果查看$someModel变量,它有一个空的SomeModel对象。

我在阅读Laravel文档,它看起来像容器或正面,但我不知道如何使用这个。你是?

编辑1:

我在路由/web.php中将路由定义为:Route::resource('users', 'UserController');

现在我必须手动定义所有路由,因为自动绑定不起作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route::get('users', 'UserController@index');
Route::get('users/create', 'UserController@create');
Route::post('users', 'UserController@store');
Route::get('users/{user}/edit', 'UserController@edit', function(App\User $user) {});
Route::post('users/{user}', 'UserController@update', function(App\User $user) {});
Route::post('users/{user}/delete', 'UserController@destroy', function(App\User $user) {});

那么,我是否应该像这样替换所有资源控制器路由到手动路由呢?

EN

回答 3

Stack Overflow用户

发布于 2017-12-03 13:25:30

资源控制器期望您使用路由模型绑定。在您的路由文件中,每个对应于带有注入模型的控制器操作的路由都需要有一个匹配的参数。

例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route::get('user/{user}', 'UserController@show');

使用上述路由,以下控制器操作将接收与作为URL参数传递的用户ID相对应的用户实例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class UserController extends Controller
{
    public function show(User $user)
    {
       ...
    }
}

您现在看到一个空模型的原因是,如果不绑定到路由参数,Laravel只会将和新的模型传递给控制器。换句话说,如果您忘记绑定路由文件中的模型,自动注入只会给您一个新的实例。

请注意,如果您正在使用路由资源,则生成的路由应该已经具有正确的参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Route::resource('users', 'UserController');

您可以运行php artisan route:list来确认您的实际路由是否正确。

票数 4
EN

Stack Overflow用户

发布于 2017-12-03 14:26:23

您的问题是控制器需要两个参数,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   public function show($id, User $user)

如果你尝试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   public function show(User $user)

它应该能正常工作。

在您的路线中,您只经过一个param,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
user/{user}

因此,如果您第一个参数,它将显示数字1,但如果您传递给模型,它将返回相应的用户,根据您在路由中传递的内容。

User模型返回空对象的原因是没有传递给它的值。还要确保您的路由占位符:/{user}匹配控制器:public function show(User $user)中的变量名。

希望这能有所帮助。

票数 2
EN

Stack Overflow用户

发布于 2017-12-03 20:48:50

我也遇到了同样的问题。如果您的模型有两个或两个以上的单词,您只能使用像$modeModel这样的小写字母作为$somemodel。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function show(SomeModel $somemodel)
{
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47623272

复制
相关文章
Laravel5.5 session 的配置及使用示例讲解
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/details/79282843
泥豆芽儿 MT
2018/09/11
1.4K0
Laravel5.5 session 的配置及使用示例讲解
Laravel 5.5 LTS 正式发布!
千呼万唤始出来~等了那么久的新一代 LTS!距离上一代 LTS (即 5.1)感觉已经好遥远了呢!新版的 LTS 同样会有为期两年的 Bug 修复和三年的安全更新!而其他对于一般的发行版则是提供六个月
overtrue
2018/07/05
2.6K0
如何提前体验 Laravel 5.5
Laravel 5.5 再过一个多月就要发布了,这将是 Laravel 框架的下一个 LTS release(长期支持版),对于喜欢追求最新版本的 Laravel 开发者来说,现在肯定已经至少都升级到 Laravel 5.4 了,接下来升级到 Laravel 5.5 自然是理所当然的事情,但是对于追求稳定和长期技术支持的人来说,即使依然在使用 Laravel 5.1, 面对这个新的长期支持版,吸引力甚至比其它更新版本的用户更大,因为自 5.1 以后,Laravel 在 5.2, 5.3, 5.4版本中,已经
小李刀刀
2018/03/02
2.6K0
laravel5.5功能尝鲜
如果laravel 命令报错,请参考 http://blog.csdn.net/fishermanmax/article/details/51916898 如果下载时报错,请参考 http://www.jianshu.com/p/0456dd3cc78b
lilugirl
2019/05/28
3K0
laravel5.5功能尝鲜
写在 Laravel 5.5 发布之前
Laravel 5.5 将于 2017年7月发布,这将是继 Laravel 5.1 之后的下一个长期支持版本,相比之前发布的几个“中间版本”而言,意义重大。目前我在内部项目中已经在使用 Laravel 5.5,接下来会连续地翻译、撰写相关 Laravel 5.5 版本的文章。 FAQ Q: Laravel 5.5 什么时候发布? A: 按照时间表,正式发布时间是 2017年7月。 Q: Laravel 5.5 发布之后,5.4 还会继续提供支持吗? A: Laravel 5.4 在 5.5 发布之后,不会再
小李刀刀
2018/03/02
1.9K0
laravel5.5 任务调度 (转载)
我们需要在 App\Console\Kernel 类的 schedule 方法中定义所有任务调度。例如:
lin_zone
2018/08/15
6100
laravel5.5 任务调度 (转载)
Laravel 5.5 为 Mailables 类型新增 theme 属性
在 Laravel 5.4 中 引入了 Markdown 邮件,使得我们在邮件中享受 Blade 模板的组件和 Slots 的同时,可以用 Markdown 语法编写电子邮件。 Laravel 自带了一系列预定义的组件,比如 headers, footers, buttons 以及 tables. 开发者可以很容易地在电子邮件模板中使用这些组件。 @component('mail::button', ['url' => $actionUrl, 'color' => $color]) {{ $acti
小李刀刀
2018/03/02
1.6K0
Laravel 5.5 的 “vendor:publish” 新增 provider 提示
在以前的版本中,当使用 artisan vendor:publish 命令来发布扩展包的资源时,需要自己指定 --provider 参数或者 --tag 参数来确定要发布什么资源。比如 --provider="Barryvdh\Debugbar\ServiceProvider",用于发布指定 provider 包含的资源,或者 --tag=config 这样的命令。如果你什么参数都不加的话,默认会发布所有 provider 包含的所有资源(配置文件、视图、样式和JS等)。在 Laravel 5.5 中,做了
小李刀刀
2018/03/02
1.5K0
Laravel 5.4 及 5.5 中的全新字符串辅助方法
Laravel 5.5 已经确定预计在 2017年 Laravel 欧洲大会上正式发布。这次重大升级,也带来了一些新的字符串相关的辅助方法。 以下介绍一些最近比较火的字符串辅助方法,他们最近已经得到了许多 Laravel 开发者的喜爱。 str_start() 方法 str_start() 辅助方法是由 Caleb Porzio 在 Laravel 5.4 分支中贡献的。这个方法用于确定字符串的开头有且仅有一个特定的字符。 比如我们在进行 URL 或者 Path 的拼接时,如何确保只含一个路径分隔符"/"呢
小李刀刀
2018/03/02
1K0
laravel 使用资源路由创建控制器关联模型获取不到实例??(坑)
死活为空,我刚开始还以为我某个地方写的有问题呢?排查了一遍控制器,模型,视图,数据库之类的都未解决。最后我查看了一下路由列表
友儿
2022/09/11
9010
php laravel5.5使用rabbitmq消息队列
博主看了一些消息队列,大多数消息队列都没有对 php 比较友好的 SDK,这边 rabbitmq 算是一个不错的消息队列,给大家介绍一下在 Laravel 中如何使用。
憧憬博客
2020/07/21
1.7K0
StatefulSet资源控制器
一、statefulset介绍 StatefulSet 是为了解决有状态服务的问题而设计的资源控制器。 匹配 Pod name ( 网络标识 ) 的模式为:(statefulset名称)-​(序号),比如上面的示例:web-0,web-1,web-2 StatefulSet 为每个 Pod 副本创建了一个 DNS 域名,这个域名的格式为: $(podname).(headless server name),也就意味着服务间是通过Pod域名来通信而非 Pod IP,因为当Pod所在Node发生故障时,
星哥玩云
2022/09/15
4650
StatefulSet资源控制器
php中Laravel控制器详解
Laravel中的请求使用的是symfony/http-foundation组件,请求里面放了$_GET,$_POST,$_COOKIE,$_FILES,$_SERVER等数据。
IT工作者
2022/04/16
2.2K0
Laravel源码解析之控制器
控制器能够将相关的请求处理逻辑组成一个单独的类, 通过前面的路由和中间件两个章节我们多次强调Laravel应用的请求在进入应用后首现会通过Http Kernel里定义的基本中间件
KevinYan
2019/10/13
9280
[译]Laravel 5.0 之方法注入
本文译自 Matt Stauffer 的系列文章. ---- Laravel 5.0 中, 容器可以对其解析的方法进行自动分析, 然后根据类型限制把方法所需要的依赖项自动注入. 本文将介绍这一机制的原理, 何时解析, 如何注入等. 依赖注入的背景知识 在现代编程实践中, PHP 开发者要学会的首要知识之一就是使用依赖注入. 这就是 SOLID(单一功能, 开闭原则, 里氏替换, 接口隔离以及依赖反转) 中的 依赖反转(Dependency Inversion). Laravel 的 容器 被称为 IOC(
小李刀刀
2018/03/02
1.1K0
点击加载更多

相似问题

Laravel 5.5资源控制器故障

23

Laravel 5.5补充资源控制器示例

01

laravel 5.5资源restful

40

带资源控制器的路由前缀- Laravel 5.5

40

Laravel 5.5将参数从控制器传递到资源

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文